1樓:做而論道
在計算機系統中,攔明數值,一律採用補碼錶示和儲存。
原碼和反碼,都是不存在的。
補碼,是由數值轉換過來的簡判告。
數值與補碼,可以直接轉換,與原碼反碼並無半點關係。
數值與八位的補碼,對應關係,見下表:
由表可見,255,就是-1 的補碼。
當你賦值 255 之後,再按照「帶符號數」來顯示,就是-1。
如果你按照「無符衝梁號數」來顯示,就是 255 了。
顯示帶符號數:printf("%d", n);
顯示無符號數:printf("%u", n);
你試試看吧。
二進位的補碼多少位
2樓:
八位二進位正數的補碼範圍是0000 0000 ~ 0111 1111 即0 ~ 127,負數的補碼範圍是正數的原碼0000 0000 ~ 0111 1111 取反加一(也可以理解為負數1000 0000 ~ 1111 1111化為反碼末尾再加一)。所以得到 1 0000 0000 ~ 1000 0001,1000 0001作為補碼,其原碼是1111 1111(-127),依次往前推,可得到-1的補碼為1111 1111,那麼補碼0000 0000的原碼是1000 0000符號位同時也可以看做數字位即表示-128,這也解釋了為什麼127(0111 1111)+1(0000 0001)=-128(1000 0000)。在計算機中資料用補碼錶示,利用補碼統一了符號位與數值位的運算,同時解決了+0、-0問題,將空出的二進位原碼1000 0000表示為-128,這也符合身邏輯意義的完整性。
因此八位二進位數表示範圍為-128~+127。
資料背後的二進位 - 原碼、補碼
3樓:科創
在計算機中資料是以二進位儲存的。
在資料中,每個位置都有乙個位權。以十進位為例,從右到左,以0開始,第一位是1即 100,第二位悄扒察是10即10
1,第三位是100即10^2,以此類推。所以資料 315 = 3 * 10^2 + 1 * 10^1 + 5 * 10^0。
二進位和十進位的表示類此兆似,十進位每個位置的表示範圍是 0 - 9,位權是 10^右倒數位置,二進位每個位置範圍是 0 - 1,位權為 2^右倒數位置。
一些十進位的二進位表示示例:
十進位的負數是在前面加-,如-18,那二進位呢?
二進位使用最高位表示符號位,1表示負數,0表示正數
整數有4種型別:byte、short、int、long ,分別佔位元組,乙個位元組8位,所以符號位分別為位。
以byte為例,如果要表示 byte b = 1,二進位顯示是多少呢?
這裡就關係到二進位的原碼和補碼錶示法。
原碼錶示法就是去掉符號數啟茄字的二進位表示法,再根據正負,將符號位標為0或者1。
正數的原碼、補碼相同。
負數的補碼錶示法是在正數原碼錶示的基礎上取反,再加1。
原碼、補碼錶示示例:
8 :原碼 00001000,補碼 00001000
1 :原碼 00000001,補碼 00000001
1 : 原碼 10000001,補碼 11111111(1的原碼是00000001,取反是11111110,再加 1,是 11111111)
127 :原碼 111111111,補碼 10000001(127 的原碼是 01111111,取反是 10000000,加1 ,是1000001)
如果根據乙個負數的二進位表示,計算它的十進位呢?
採用和補碼相同的運算,取反再加1。如 10000001,取反是01111110,加1是 01111111,十進位值是 127,所以10000001 的值為 - 127
計算機的運算採用的是補碼運算
以 1-1 = 0 舉例,因為計算機只能做加法,所以1-1 被轉換為 1 + 1),如果使用原碼計算,則是 00000001 + 10000001 = 10000010,得到的原碼結果是 -2,不符合預期。若採用補碼的方式,則是 000000001 + 11111111 = 00000000,這才是正解。
二進位的原碼、補碼、反碼詳解
4樓:象拔蚌燒賣
計算機中,並沒有原碼和反碼,只是使用補碼,代表正負數。
使用補碼的意義:可以把減法或負數,轉換為加法運算。從而簡化計算機的硬體。
比如鐘錶,時針轉一圈,週期是 12 小時。
倒撥 3 小時,可以用正撥 9 小時代替。
9,就稱為-3 的補數。
計算方法:12-3 = 9。
對於分針,倒撥 x 分,就可以用正撥 60-x 代替。
如果,限定了兩位十進位數 (0~99),週期就是 100。
那麼,減一,就可以用 +99 代替。
忽略進位,只取兩位數,這兩種演算法,結果就是相同的。
於是,99 就是 -1 的補數。
其它負數的補數,大家可以自己求!
求出了負數的補數,就可用加法,代替減法了。
計算機中使用二進位,補數,就改稱為【補碼】。
常用的八位二進位是:0000 0000~1111 1111。
它們代表了十進位:0~255,週期就是 256。
那麼,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的補碼,就是 1111 1111 = 255。
同理:-2 的補碼,就是 1111 1110 = 254。
繼續:-3 的補碼,就是 1111 1101 = 253。
最後:-128,補碼是 1000 0000 = 128。
計算公式:負數的補碼=256+這個負數。
正數,直接運算即可,不需要求補碼。
也可以說,正數本身就是補碼。
補碼的應用如: 7-3 = 4。
用補碼的計算過程如下:
7 的補碼=0000 0111
3的補碼=1111 1101
相加---得: (1) 0000 0100 = 4 的補碼。
捨棄進位,只保留八位,作為結果即可。
這就是:使用補碼,加法就代替了減法。
所以,在計算機中,有乙個加法器,就夠用了。
原碼和反碼,都沒有這種功能。
原碼和反碼,毫無用處。計算機中,根本就沒有它們。
5樓:黑科技
在計算機中所有的資料都是以二進位儲存的。
中機器數中,使用最高位來表示數字的**:1為負,0為正;
乙個字長為8為。
單看1000 0011這個數,不知道是機器數還是二進位數,所以引出了機器數的真值概念。
機器數的真值就是機器數所對應的真值的數值;
如:1000 0011 = 3;
符號位:首先確定乙個數的正負,如果是正數,首位使用0表示,如果是負數,首位用1表示。
有效位:真值的絕對值轉化為二進位形式。
符號為和有效位拼接到一起。
正數:正數的反碼和原碼相同。 +3 :0000 0011【原碼】 0000 0011【反碼】
負數:符號位不變,其餘各位直接取反,二進位只有兩種狀態:1->0;0->1; -3:
1000 0011【原碼】 1111 1100【反碼】
正數:正數的原碼反碼補碼全部相同 +3: 0000 0011【原碼】 0000 0011【反碼】 0000 0011【補碼】
負數:求得原碼,再求反碼,中最後一位+1,這就是負數的補碼 -3:1000 0011【原碼】 1111 1100【反碼】 1111 1101【補碼】
反碼:中沒有計算機的時候只設計了加法器,沒有減法器,使用加法計算來表示減法,補碼:反碼解決了沒有減法的問題,但是會出現絕對值相同的正負兩個數相加會出現-0情況,那麼在計算機中不能出現0的表現不唯一情況,所以採用補碼進行修正。
注】1、採用補碼計算; 2、正數補碼、反碼、原碼相同; 3、負數首位符號位為1;
例:正數相加
例:減法(可以看做負數相加)
56為正數,補碼和原始碼一樣,求出-33的補碼,然後將兩個數的補碼相加得出結果。
正數:補碼=反碼=原碼。
負數:補碼的補碼(首位不變,其餘取反,再加1)
正數:不變(原碼 = 反碼= 補碼)
負數:首位不變,其餘取反。
6樓:做而論道
原碼和反碼,在計算機中,都不存在。
詳解它們,都沒有任何意義。
在計算機系統中,只用補碼,表示數值。
你只需掌握「數值與補碼」的換算,即可。
補碼,其實是乙個「代替負數」的正數。
利用補碼代替了負數之後,計算機中,就沒有負數了。
同時,也就沒有了減法運算。
因此,計算機,只需具有乙個加法器,就可以走遍天下了。
正數(即補碼),怎麼就能代替負數呢?
其中的道理,十分簡單。就是三歲小孩,都會懂的。
你三歲時,只會數一百個數(0~99)。
到了 100,就重新開始數,10^2,就是你的計數週期。
這時,你就可以用加法,來做減法:
25 + 99 = 一百) 24
進位,你一定會忽略! 那麼在此時:
+99 就可以當做-1 使用。
98,也就能當-2 了。
這些正數,就是「負數的補數」。
怎麼求:補數 = 負數 + 週期(10^n),n 是位數。
計算機用二進位,此時,就叫做「補碼」了。
8 位 2 進位數的計數週期是:2^8 = 256。
那麼,-1 的補碼就是:-1 + 256
255 = 1111 1111(二進位)。
2 的補碼是:254 = 1111 1110。
補碼是「代替負數」的正數。
而正數,不需要代替,必須直接參加運算。
也就是說,正數,不存在補碼。
這就是補碼的詳解。
補碼,和原碼反反碼,都沒有任何關係。
取反加一符號位不變。。。都沒有任何依據,就不要相信了。
如何理解二進位制原碼,反碼,補碼,二進位制補碼運算
帶符號數,有三種表示方法,即 原碼 反碼和補碼。但是,在計算機系統中,數值一律用 補碼 來表示和儲存。所以,在計算機系統中,原碼和反碼,都是不存在的。使用補碼的意義 可以把減法或負數,轉換為加法運算。因此,就能簡化計算機的硬體。補碼的概念,來自於 補數。比如鐘錶,時針轉一圈,週期是 12 小時。那麼...
c語言二進位制表示,C語言中二進位制數字的字首是什麼?
正數,原碼補碼一樣。負數 除符號位,每位取反,然後加1。所以 1的16位表示為 11111111 11111111 有符號的負整數在記憶體中以二進位制補碼的形式存放原始碼是 10000000 00000001按位取反 符號位不變 11111111 11111110 1得到 1的補碼 11111111...
c語言十進位制數轉化為二進位制數,C語言 十進位制數轉化為二進位制數
思路 十進位制整數轉換為二進位制整數採用 除2取餘,逆序排列 法。即用2整除十進位制整數,可以得到一個商和餘數 再用2去除商,又會得到一個商和餘數,如此進行,直到商為0時為止,然後把先得到的餘數作為二進位制數的低位有效位,後得到的餘數作為二進位制數的高位有效位,依次排列起來。include stdi...