1. 程式人生 > >補碼,原碼,反碼的意義

補碼,原碼,反碼的意義

補碼,原碼,反碼

計算機組成原理中,有補碼,原碼,反碼的概念,但是一直搞不清楚為什麼,只是記憶公式,不明白是怎麼來的,現在寫下來要如何理解各種碼之間的關係,以及怎麼來的。

補碼

我們用C語言來舉例。C語言中short是2個位元組。則考慮如下語句:

short a = 5;

其中a在記憶體中的二進位制表示為:

0000 0000 0000 0101

在計算機中,我們想要把加法和減法都統一成一種相同的運算規則,不用再對加法和減法進行區分,所以就要引入補碼。

考慮 5+(-5)這種情況。當然,實際上就是5-5,但我們想要都統一成一種運算,所以就要看作是5+(-5)。當然,正確的結果應該是0才對,不管你怎麼看待減法運算,結果肯定不能變。
-5的二進位制表示為(最高位為符號位):

1000 0000 0000 0101

如果我們不做任何改變,直接把-5和5用二進位制來相加,結果是:

1000 0000 0000 1010

也就是十進位制裡的-10,很顯然,我們需要的是0,因此這種計算規則是錯誤的。
那麼如何讓結果是0呢?很簡單:觀察5的二進位制表達:

0000 0000 0000 0101

我們對5進行按位取反,得到:

1111 1111 1111 1010

然後和5相加,很顯然,結果是:

1111 1111 1111 1111

此時,距離0只有一步之遙,只需要在結果上加1就行了,因為short只有16位,所以進位就會益處,不用管了,因此a的8位全部是0,我們想要的0也就的出來了。

加1後得:

0000 0000 0000 0000

因為 直接什麼都不變,用5+(-5)的二進位制表示去相加,結果等於10,所以,我們就把-5用-5的補碼來表示,這樣相加就是0了,得到了正確的結果。因此,計算-5的補碼,就是把5(注意是5不是-5)的二進位制表示,按位取反(包括符號位),然後加1得到的結果。而正數的補碼還是本身。

相關推薦

位運算符補碼

數據 還原 .cn 參與 位與 沒有 機器語言 art 電路 按位運算就把數字轉換為機器語言->二進制的數字來運算的一種運算形式。 & 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 | 按位或運算符:只要對應的二個二進位有一

負數的補碼

轉換 例如 整型 強制轉換 浮點 === 類型強制轉換 大數據 nbsp 正數的原碼,補碼,反碼 相同, 正數用原碼表示,負數用補碼表示,負數用如果也用原碼表示,表示範圍就只有255個數 -128無法表示. 數據的取值範圍 byte類型的取值範圍:有符號的[-128,

補碼計算機中負數的運算

原碼:把整數換成二進位制,就是原碼。負數的最高位表示符號位為1,正數為0.             eg:單位元組的6原碼為:0000 0110 ; -6的原碼為1000 0110 反碼:正數

補碼及位操作符C語言位操作

計算機中的所有資料均是以二進位制形式儲存和處理的。所謂位操作就是直接把計算機中的二進位制數進行操作,無須進行資料形式的轉換,故處理速度較快。 1、原碼、反碼和補碼 位(bit) 是計算機中處理資料的最小單位,其取值只能是 0 或 1。 位元組(Byte)

Java 補碼自定義的異常類手動丟擲異常。

1.byte 型佔一個位元組,正數按原碼儲存,負數按補碼儲存。第一位為符號符,“0”表示正數,“1”表示負數。 0000 0000表示 0 ,1000 0000 表示 -0,由於byte表示的範圍為256,+0,-0對應補碼都為0000000,所以補碼10000000沒有所為

補碼、移無符號位位運算

無符號為表示的是最高位的0、1代表正常的數 而不是符號,這樣的話 00000111還是表示7 但是10000111表示的是128+7=135 所以無符號數表示的數是非負數,而有符號的表示的是正負數

補碼負數表示法

計算 符號 正數 運算 但是 符號位 相同 反碼 tro 原碼 5 => 0b101,1 => 0b1 ,-1 => -0b1, bin(-1) 反碼 正數的反碼與原碼相同;負數的反碼符號位不變其余按位取反 補碼 正數的補碼與原碼相同;負數的

二進制的補碼及相關計算

pan pre 計算機 php 位運算 log 其他 說明 符號 1.二進制的最高位是符號位,0表示正數,1表示負數2.正數的原碼、反碼、補碼都一樣3.負數的反碼=它原碼符號位不變,其他位取反(0->1,1->0)4.負數的補碼=它的反碼+15.0的反碼、補碼、

補碼、移、真值(及(8C5A3E00)16計算)

原碼、反碼、補碼、移碼、真值(及(8c5a3e00)16計算)真值: 符號位 + | X | 一般 0 正 1負 負數: -8 二進制8位表示: 1)真值 X:- 1000 2)原碼:1 0001000 3)反碼:1 1110111(符號位不變,其余位取反) 4)補碼:

補碼、移之間的關系和轉換

span 數值 一個 寄存器 如果 有符號數 pan 關系 style 在計算機中參與運算的數有兩大類:無符號數和有符號數。無符號數,即沒有符號的數,在寄存器中的每一位均可用來存放數值;而有符號數,則需要留出位置來存放符號。以機器字長為8位為例,無符號數表示的範圍是0~25

Java:二進制(補碼)與位運算

無符號 位與 轉換成 轉換 不同 一個 位或 其他 log 一、二進制(原碼、反碼、補碼) 二進制的最高位是符號位(“0”代表正數,“1”代表負數); Java中沒有無符號數; 計算機以整數的補碼進行運算; 1. 原碼:將一個整數轉換成二進制表示 以 int 類型為例

補碼 詳解

blog 應該 符號 order 感覺 最小值 而是 們的 有符號 作者:張子秋出處:http://www.cnblogs.com/zhangziqiu/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法

(轉)C語言之補碼

計算機 進制 情況下 class 正數 去掉 都是 OS 原碼 原碼、反碼和補碼 1).數據在內存中存儲的時候都是以二進制的形式存儲的. int num = 10; 原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式. 數據是以補碼

數的補碼表示

height 轉換 img 常見 相互轉換 9.png div 小數 正數 1.原碼、反碼、補碼的定義     對於n+1位機器數,       x, x為正數 x,

位運算符、按位與、按位或、按位非、左移、右移、補碼

位運算符 位數 是我 計算機 基礎上 個數字 部分 普通 bsp 位運算符的基本規則1,位運算符都是針對整數的二進制數字形式而進行的。2,按位與運算基本規則(規則表):1 & 1 ==> 11 & 0 ==> 00 & 1 ==>

補碼的理解與思考

原碼 反碼 補碼 原碼、反碼、補碼都是二進制表示數的方式 原碼原碼:首位為符號位,0表示整數,1表示負數,其余位表示數值,例如0011表示+3,而1011表示-3。優點:符合人類閱讀習慣,無論正數負數都能馬上讀出來缺點:計算機做運算的時候不會把符號位提取出來,然後單獨計算數值位的,而是把整個數包括

補碼

方法 n-1 字長 執行 溢出 註意 就會 減負 原因 數在計算機中是以二進制形式表示的。 數分為有符號數和無符號數。 原碼、反碼、補碼都是有符號定點數的表示方法。 一個有符號定點數的最高位為符號位,0是正,1是副。 以下都以8位整數為例, 原碼就是這個數

補碼總結

正數的原碼,反碼和補碼都一樣,符號位為0;負數的反碼為原碼取反,補碼為反碼+1,符號位為1。負數在計算機中以補碼形式儲存,比如-5就是以(-5)的補碼儲存,-5的值就是5的二進位制碼取反+1。 x&(-x)意思就是x&(x的取反+1),即:保留x的最低位 1 ,

補碼的詳解

原碼 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是: [1111 1111

補碼的計算

原碼:就是二進位制點表示法,正數最高位是0,負數最高位是1,其餘位表示數值大小 反碼:正數的反碼與原碼相同;負數的反碼符號位不變,其餘位和原碼相反 補碼:正數的補碼和原碼相同;負數的補碼等於其反碼的末尾+1, 在計算機內,所有資料的運算都是採用補碼進行的