国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【007】C++數(shù)據(jù)類型之原碼、補(bǔ)碼、反碼

這篇具有很好參考價(jià)值的文章主要介紹了【007】C++數(shù)據(jù)類型之原碼、補(bǔ)碼、反碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

引言


?? 作者簡介:專注于C/C++高性能程序設(shè)計(jì)和開發(fā),理論與代碼實(shí)踐結(jié)合,讓世界沒有難學(xué)的技術(shù)。包括C/C++、Linux、MySQL、Redis、TCP/IP、協(xié)程、網(wǎng)絡(luò)編程等。
??
??? CSDN實(shí)力新星,社區(qū)專家博主
??
?? 專欄介紹:從零到c++精通的學(xué)習(xí)之路。內(nèi)容包括C++基礎(chǔ)編程、中級(jí)編程、高級(jí)編程;掌握各個(gè)知識(shí)點(diǎn)。
??
?? 專欄地址:C++從零開始到精通
??
?? 博客主頁:https://blog.csdn.net/Long_xu


?? 上一篇:【006】C++數(shù)據(jù)類型之進(jìn)制間的轉(zhuǎn)換

?? 下一篇:【008】C++數(shù)據(jù)類型之重要關(guān)鍵字詳解

一、原碼、補(bǔ)碼、反碼的概述

計(jì)算機(jī)存儲(chǔ)的是數(shù)據(jù)的補(bǔ)碼。

  • 原碼:計(jì)算機(jī)中對(duì)數(shù)字的二進(jìn)制定點(diǎn)表示方法。比如123的原碼是0111 1011。

  • 無符號(hào)數(shù):原碼=反碼=補(bǔ)碼。

  • 有符號(hào)數(shù):要分正數(shù)和負(fù)數(shù),正數(shù)的最高位為0,負(fù)數(shù)的最高位為1。其中,正數(shù)的原碼、反碼、補(bǔ)碼都是相同的;負(fù)數(shù)的反碼等于原碼的符號(hào)數(shù)(最高位)不變,其他位取反;補(bǔ)碼等于反碼+1。
    比如:-123的原碼是1111 1011,反碼為1000 0100,補(bǔ)碼為1000 0101。

原碼、補(bǔ)碼和反碼都是用于計(jì)算機(jī)表示有符號(hào)整數(shù)的方法。

  • 原碼:最高位表示符號(hào)位,0為正數(shù),1為負(fù)數(shù),其余位表示數(shù)值。例如,+3的8位原碼為00000011,-3的8位原碼為10000011。

  • 反碼:在原碼基礎(chǔ)上,負(fù)數(shù)的表示方法改為將除了符號(hào)位以外的所有位取反(即0變1,1變0)。例如,-3的8位反碼為11111100。

  • 補(bǔ)碼:在反碼基礎(chǔ)上再加1得到的結(jié)果,即負(fù)數(shù)的補(bǔ)碼是其對(duì)應(yīng)正數(shù)的原碼按位取反再加1。例如,-3的8位補(bǔ)碼為11111101。

負(fù)數(shù)在計(jì)算機(jī)中以補(bǔ)碼形式存儲(chǔ);非負(fù)數(shù)在計(jì)算機(jī)中以原碼形式存儲(chǔ)。

二、為什么要使用補(bǔ)碼?

使用補(bǔ)碼可以簡化計(jì)算機(jī)中的運(yùn)算邏輯,同時(shí)還能避免原碼和反碼中出現(xiàn)的“零”問題,即正數(shù)的反碼和補(bǔ)碼等于原碼,而負(fù)數(shù)的反碼和補(bǔ)碼不等于原碼,因此沒有正零和負(fù)零的區(qū)別。

(1)統(tǒng)一了 0 的編碼:

+0補(bǔ)碼:0000 0000
-0補(bǔ)碼:0000 0000

(2)將減法運(yùn)算變加法運(yùn)算:

// 沒有補(bǔ)碼的情況
100000 1010
-61000 0110
---------------
---- 1001 0000
// 結(jié)果是16,有問題
// 有了補(bǔ)碼
100000 1010
-61111 1010
---------------
---- 0000 0100
// 溢出位會(huì)被移除,結(jié)果等于4,滿足運(yùn)算結(jié)果

三、對(duì)數(shù)據(jù)的存

負(fù)數(shù)在計(jì)算機(jī)中以補(bǔ)碼的方式存儲(chǔ)。

非負(fù)數(shù)、八進(jìn)制數(shù)、十六進(jìn)制數(shù)等在計(jì)算機(jī)以原碼的方式存儲(chǔ)。

示例:

#include <iostream>
#include <bitset>

using namespace std;

int main()
{
	short data=-10;
	cout<<bitset<16>(data)<<endl;
	data=10;
	cout<<bitset<16>(data)<<endl;
	data=0x80;
	cout<<bitset<16>(data)<<endl;
	return 0;
}

輸出:

1111111111110110
0000000000001010
0000000010000000

四、對(duì)數(shù)據(jù)的取

  • 如果是對(duì)無符號(hào)變量進(jìn)行取值,輸出內(nèi)存的原樣數(shù)據(jù)。
  • 如果是對(duì)有符號(hào)變量進(jìn)行取值,系統(tǒng)會(huì)去看內(nèi)存的最高位,如果最高位為0表明是正數(shù),內(nèi)存原樣輸出。如果最高位是1表示負(fù)數(shù),將內(nèi)存數(shù)據(jù)求補(bǔ)碼(得到原碼)輸出。

示例:

#include <iostream>
#include <bitset>

using namespace std;

int main()
{
	unsigned short data = -10;
	cout << bitset<16>(data) << endl;
	cout << dec << data << endl;
	data = 10;
	cout << bitset<16>(data) << endl;
	cout << dec << data << endl;
	short data2 = 0x8080;
	cout << bitset<16>(data2) << endl;
	cout << data2 << endl;
	return 0;
}

輸出:

1111111111110110
65526
0000000000001010
10
1000000010000000
-32640

總結(jié)

原碼是數(shù)值的二進(jìn)制表示方法,其中最高位表示符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。

補(bǔ)碼是為了解決原碼運(yùn)算中存在的符號(hào)位帶來的問題而提出的一種方法。在補(bǔ)碼中,正數(shù)的補(bǔ)碼與原碼相同,而負(fù)數(shù)的補(bǔ)碼則是其對(duì)應(yīng)正數(shù)的反碼加1。

反碼也是為了解決原碼運(yùn)算中存在的符號(hào)位帶來的問題而提出的一種方法。在反碼中,正數(shù)的反碼與原碼相同,而負(fù)數(shù)的反碼則是將其對(duì)應(yīng)正數(shù)的二進(jìn)制表示中每一位取反。但是,反碼存在一個(gè)問題:它有兩個(gè)0表示+0和-0,這會(huì)導(dǎo)致計(jì)算機(jī)在進(jìn)行數(shù)學(xué)運(yùn)算時(shí)出現(xiàn)不確定性。

總之,補(bǔ)碼是目前計(jì)算機(jī)內(nèi)部存儲(chǔ)和運(yùn)算使用的一種數(shù)值表示方法,因?yàn)樗梢员苊獬霈F(xiàn)不確定性的情況。而原碼和反碼則只在理論上有一定的意義,在實(shí)際編程中很少使用。
【007】C++數(shù)據(jù)類型之原碼、補(bǔ)碼、反碼文章來源地址http://www.zghlxwxcb.cn/news/detail-451697.html

到了這里,關(guān)于【007】C++數(shù)據(jù)類型之原碼、補(bǔ)碼、反碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ?【C語言趣味教程】(2) 整數(shù)類型 | 數(shù)據(jù)類型的概念 | 原碼反碼與補(bǔ)碼 | 有符號(hào)型和無符類型 | 研究 signed char 與 unsigned char 的取值范圍

    ?【C語言趣味教程】(2) 整數(shù)類型 | 數(shù)據(jù)類型的概念 | 原碼反碼與補(bǔ)碼 | 有符號(hào)型和無符類型 | 研究 signed char 與 unsigned char 的取值范圍

    ? ???《C語言趣味教程》??? 猛戳訂閱?。?! 在講解數(shù)據(jù)類型前,我們不得不先講解一些必備的知識(shí)點(diǎn),比如如何定義一個(gè)變量,數(shù)據(jù)類型的基本概念。并介紹 ASCII 碼,為 char 類型的講解做必要的鋪墊。然后講解原碼反碼和補(bǔ)碼,講解 IEEE754標(biāo)準(zhǔn)時(shí)需要這部分的知識(shí)作為基

    2024年02月15日
    瀏覽(18)
  • 原碼,反碼,補(bǔ)碼,移碼

    原碼、反碼、補(bǔ)碼和移碼是在計(jì)算機(jī)中表示有符號(hào)整數(shù)的方法。它們是為了處理正負(fù)數(shù)的運(yùn)算和表示而設(shè)計(jì)的。下面我會(huì)逐個(gè)解釋這些概念,并說明它們的使用和理解。 原碼(Sign-Magnitude Representation): 原碼是最簡單的表示方法,其中最高位表示符號(hào)(0代表正數(shù),1代表負(fù)數(shù)

    2024年02月08日
    瀏覽(21)
  • 原碼,反碼,補(bǔ)碼

    ? ? ? ? 原碼、反碼和補(bǔ)碼是計(jì)算機(jī)中表示有符號(hào)整數(shù)的三種不同的二進(jìn)制表示形式。它們的理解和原理涉及了計(jì)算機(jī)內(nèi)部整數(shù)表示的數(shù)學(xué)概念和編碼規(guī)則。 十進(jìn)制數(shù) 原碼 反碼 補(bǔ)碼 +5 00000101 00000101 00000101 +4 00000100 00000100 00000100 +3 00000011 00000011 00000011 +2 00000010 00000010 0000001

    2024年02月15日
    瀏覽(18)
  • 什么是原碼、反碼和補(bǔ)碼

    什么是原碼、反碼和補(bǔ)碼

    前言 一個(gè)數(shù)在計(jì)算機(jī)中的表示形式是二進(jìn)制的話,這個(gè)數(shù)其實(shí)就叫機(jī)器數(shù)。 機(jī)器數(shù)通常是帶有符號(hào)的(指有正數(shù)和負(fù)數(shù)之分),計(jì)算機(jī)用最高位存放符號(hào),這個(gè) bit 一般叫做符號(hào)位。 正數(shù)的符號(hào)位為 0, 負(fù)數(shù)的符號(hào)位為 1。比如,十進(jìn)制中的數(shù) +7 ,計(jì)算機(jī)字長為8位,轉(zhuǎn)換成

    2023年04月09日
    瀏覽(19)
  • 原碼、補(bǔ)碼、反碼的關(guān)系及應(yīng)用場(chǎng)景

    是三種表示有符號(hào)整數(shù)的方法,它們之間存在一定的關(guān)系。 原碼 是最基本的表示方法,即將一個(gè)數(shù)的符號(hào)位和數(shù)值位分開表示,符號(hào)位用0表示正數(shù),用1表示負(fù)數(shù)。例如,+7的原碼為00000111,-7的原碼為10000111。 反碼 是在原碼的基礎(chǔ)上,將負(fù)數(shù)的數(shù)值位按位取反得到的表示方

    2024年02月06日
    瀏覽(22)
  • List 3.5 詳解原碼、反碼、補(bǔ)碼

    List 3.5 詳解原碼、反碼、補(bǔ)碼

    本博客文章已收錄至我的Java SE專欄,如需閱讀其他有關(guān)博客筆記請(qǐng)轉(zhuǎn)至該專欄下 傳送門 --Java SE_程序員雨空集 目錄 ?前言 原碼 原碼的示例 原碼的弊端 反碼 反碼的示例 反碼的弊端 補(bǔ)碼 補(bǔ)碼的示例 補(bǔ)碼的小細(xì)節(jié) 總結(jié) 原碼:十進(jìn)制數(shù)據(jù)的二進(jìn)制表現(xiàn)形式,最左邊是符號(hào)位,

    2024年02月08日
    瀏覽(51)
  • 補(bǔ)碼的反碼加1為什么是原碼?

    搞了半個(gè)小時(shí),終于弄懂了。 16 8 4 2 1 原碼 1 0 0 1 1 反碼 0 1 1 0 0 補(bǔ)碼 0 1 1 0 1 學(xué)到這里了,我們肯定知道,原碼+補(bǔ)碼 = 0,在這里也就是 = 19 + 13 = 32,溢出來的一位正好舍去了; 所以說,對(duì)啊,只要保證原碼+補(bǔ)碼 = 32(以此類推)不就好了嗎! 所以,補(bǔ)碼是 通過原碼 這樣得

    2024年02月10日
    瀏覽(22)
  • Java基礎(chǔ):進(jìn)制之間的轉(zhuǎn)換,8421碼,原碼,反碼,補(bǔ)碼

    1平時(shí)的數(shù)一般都是用十進(jìn)制表示的 十進(jìn)制: 12345=10000+2000+300+40+5 =1*10^4+2*10^3+3*10^2+4*10^1+5*10^0 =1*10000+2*1000+3*100+4*10+5*1 =10000+2000+300+40+5 =12345 十進(jìn)制轉(zhuǎn)換為其他進(jìn)制: 整數(shù)除以要轉(zhuǎn)換目標(biāo)進(jìn)制的基數(shù),一直除完為止,再將它們的余數(shù)由下對(duì)上排列。 二進(jìn)制由0,1組成,0b開頭 八進(jìn)

    2023年04月08日
    瀏覽(66)
  • verilog學(xué)習(xí)筆記5——進(jìn)制和碼制、原碼/反碼/補(bǔ)碼

    verilog學(xué)習(xí)筆記5——進(jìn)制和碼制、原碼/反碼/補(bǔ)碼

    2023.8.13 天氣晴 整數(shù):除以2,余數(shù)倒著寫 小數(shù):乘以2,正著寫 例題1 : 例題2 : 十進(jìn)制數(shù)13.613轉(zhuǎn)化為二進(jìn)制數(shù),要求誤差小于1% 乘以2的次方 乘法 :被乘數(shù)左移,后相加 除法 :除數(shù)右移,被除數(shù)/余數(shù)去減去除數(shù) 8位二進(jìn)制數(shù)的范圍: 有符號(hào)數(shù) 無符號(hào)數(shù) -128~127 0~255 原碼 反

    2024年02月13日
    瀏覽(20)
  • 位運(yùn)算(按位與、按位或、異或、取反)以及原碼、反碼、補(bǔ)碼

    位運(yùn)算(按位與、按位或、異或、取反)以及原碼、反碼、補(bǔ)碼

    目錄 位運(yùn)算 按位與運(yùn)算符 [ ] 按位或運(yùn)算符 [ | ] 異或運(yùn)算符 [ ^ ] 取反運(yùn)算符 [ ~ ] 移位操作 一些面試??嫉奈徊僮鬟\(yùn)算 獲取二進(jìn)制中最右邊的1 計(jì)算機(jī)原碼、反碼、補(bǔ)碼 機(jī)器數(shù) “三碼”之間的轉(zhuǎn)換 計(jì)算機(jī)中為啥要用補(bǔ)碼呢? 真數(shù) 原碼 反碼 補(bǔ)碼 有了原碼為什么要使用反碼

    2024年02月02日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包