二進位制補碼怎麼算,二進位制補碼怎麼計算的

2021-12-18 21:09:39 字數 4793 閱讀 5187

1樓:懂啦

一分鐘了解計算機與二進位制

2樓:依旭炎

1、在計算機系統中,數值一律用補碼來表示(儲存)。 主要原因:使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加法來處理。

另外,兩個用補 碼表示的數相加時,如果最高位(符號位)有進製,則進製被捨棄。 2、補碼與原碼的轉換過程幾乎是相同的。 數值的補碼表示也分兩種情況:

(1)正數的補碼:與原碼相同。 例如,+9的補碼是00001001。

(2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。 例如,-7的補碼:

因為是負數,則符號位為「1」,整個為10000111;其餘7位為-7的絕對值+7的原碼 0000111按位取反為1111000;再加1,所以-7的補碼是11111001。 已知乙個數的補碼,求原碼的操作分兩種情況: (1)如果補碼的符號位為「0」,表示是乙個正數,所以補碼就是該數的原碼。

(2)如果補碼的符號位為「1」,表示是乙個負數,求原碼的操作可以是:符號位為1,其餘各位取 反,然後再整個數加1。 例如,已知乙個補碼為11111001,則原碼是10000111(-7):

因為符號位為「1」,表示是乙個負 數,所以該位不變,仍為「1」;其餘7位1111001取反後為0000110;再加1,所以是10000111。 在「閒扯原碼、反碼、補碼」檔案中,沒有提到乙個很重要的概念「模」。我在這裡稍微介紹一下「模」 的概念:

「模」是指乙個計量系統的計數範圍。如時鐘等。計算機也可以看成乙個計量機器,它也有乙個計量範 圍,即都存在乙個「模」。

例如: 時鐘的計量範圍是0~11,模=12。 表示n位的計算機計量範圍是0~2(n)-1,模=2(n)。

【注:n表示指數】 「模」實質上是計量器產生「溢位」的量,它的值在計量器上表示不出來,計量器上只能表示出模的 餘數。任何有模的計量器,均可化減法為加法運算。

例如: 假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法: 一種是倒撥4小時,即:

10-4=6 另一種是順撥8小時:10+8=12+6=6 在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。 對「模」而言,8和4互為補數。

實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特 性。共同的特點是兩者相加等於模。 對於計算機,其概念和方法完全一樣。

n位計算機,設n=8, 所能表示的最大數是11111111,若再 加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進位制系統的 模為2(8)。 在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以 了。

把補數用到計算機對數的處理上,就是補碼。 另外兩個概念 一的補碼(one's complement) 指的是正數=原碼,負數=反碼 而二的補碼(two's complement) 指的就是通常所指的補碼

3樓:菱子

數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,"正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.儘管在歷史上手指計數(5,10進製)的實踐要比二或三進製計數出現的晚."(摘自《數學發展史》有空大家可以看看哦~,很有意思的).

為了能方便的與二進位制轉換,就使用了十六進位制(2 4)和八進位制(23).下面進入正題. 數值有正負之分,計算機就用乙個數的最高位存放符號(0為正,1為負).

這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為 (-127~-0 +0~127)共256個.

? 有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下:

假設字長為8bits ( 1 )?10-? ( 1 )10?

=? ( 1 )10?+ ( -1 )10?

= ?( 0 )10 (00000001)原?+ (10000001)原?

= (10000010)原?= ( -2 )?顯然不正確.

? 因為在兩個整數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上,對除符號位外的其餘各位逐位取反就產生了反碼.反碼的取值空間和原碼相同且一一對應.

下面是反碼的減法運算: ?( 1 )10?

-? ( 1 )?10=?

( 1 )?10+ ( -1 )?10= ?

( 0 )10 ?(00000001)?反+ (11111110)反?

=? (11111111)反?=?

( -0 ) ?有問題. ( 1 )10?

-? ( 2)10?=?

( 1 )10?+ ( -2 )10?= ?

( -1 )10 (00000001)?反+ (11111101)反?=?

(11111110)反?=? ( -1 )?

正確 問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進位制計數對人類文明的貢獻極大). 於是就引入了補碼概念.

負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在補碼中用(-128)代替了(-0),所以補碼的表示範圍為: (-128~0~127)共256個.

注意:(-128)沒有相對應的原碼和反碼, (-128) = (10000000) ?補碼的加減運算如下:

( 1 )?10-? ( 1 )?

10=? ( 1 )10?+ ( -1 )10?

= ?( 0 )10 (00000001)補?+ (11111111)補?

=? (00000000)補?= ( 0 )?

正確 ( 1 )?10-? ( 2)?

10=? ( 1 )10?+ ( -2 )10?

= ?( -1 )10 (00000001)?補+ (11111110)?

補=? (11111111)補?= ( -1 ) ?

正確 ?? 所以補碼的設計目的是: ????

⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則. ⑵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 ? 所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。

看了上面這些大家應該對原碼、反碼、補碼有了新的認識了吧!

二進位制補碼怎麼計算的

4樓:guxuecan劍

1、正數的補碼表示:

正數的補碼 = 原碼

負數的補碼 = +    or

= +

以十進位制整數+97和-97為例:

+97原碼 = 0110_0001b

+97補碼 = 0110_0001b

-97原碼  = 1110_0001b

-97補碼  = 1001_1111b

2、純小數的原碼:

純小數的原碼如何得到呢?方法有很多,在這裡提供一種較為便於筆算的方法。

以0.64為例,通過查閱可知其原碼為0.1010_0011_1101_0111b。

操作方法:

將0.64 * 2^n 得到x,其中n為預保留的小數點後位數(即認為n為小數之後的小數不重要),x為乘法結果的整數部分。

此處將n取16,得

x = 41943d = 1010_0011_1101_0111b

即0.64的二進位制表示在左移了16位後為1010_0011_1101_0111b,因此可以認為0.64d = 0.1010_0011_1101_0111b 與查詢結果一致。

再實驗n取12,得

x = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小數之後的位數情況下,計算結果相同。

3、純小數的補碼:

純小數的補碼遵循的規則是:在得到小數的原始碼後,小數點前1位表示符號,從最低(右)位起,找到第乙個「1」照寫,之後「見1寫0,見0寫1」。

以-0.64為例,其原碼為1.1010_0011_1101_0111b

則補碼為:1.0101_1100_0010_1001b

當然在硬體語言如verilog中二進位制表示時不可能帶有小數點(事實上不知道**可以帶小數點)。

4、一般帶小數的補碼

一般來說這種情況下先轉為整數運算比較方便

-97.64為例,經查詢其原碼為1110_0001.1010_0011_1101_0111b

筆算過程:

-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小數點在右數第16位,與查詢結果一致。

則其補碼為1001_1110_0101_1100_0010_1001b,在此採用 負數的補碼 = +  方法

5、補碼得到原碼:

方法:符號位不動,幅度值取反+1 or符號位不動,幅度值-1取反

-97.64補碼 = 1001_1110(.)0101_1100_0010_1001b

取反      = 1110_0001(.)1010_0011_1101_0110b

+1         = 1110_0001(.)1010_0011_1101_0111b 與查詢結果一致

6、補碼的拓展:

在運算時必要時要對二進位制補碼進行數字拓展,此時應將符號位向前拓展。

-5補碼 = 4'b1011 = 6'b11_1011

ps.原碼的拓展是將符號位提到最前面,然後在拓展位上部0.

-5原碼 = 4『b』1101 = 6'b10_0101,對其求補碼得6'b11_1011,與上文一致。

有關二進位制,什麼是二進位制

方法就是採用整數部分除以基數2和小數部分乘以基數2取整的方法!例如要把41轉化成二進位制的 2 41 餘1 最低位。2 1 1 最高位。結果就等於101001 例2 把小數轉化成二進位制。取0 取1 取1結果為。把1000轉化為十進位制等於8 因為17大於8 所以17 十進位制 大於 1000 二進...

什麼是二進位制計數法 二進位製數怎麼算?

問題一 什麼是二進位制計數法。要詳細。我是新手。十進位制是 逢十進一。二進位制就是 逢二進一。比如 十進位制下 2 2 4 二進位制下 2換算成二進位制,根據 逢二進一,2 10 換算成了 10 2 10 10 20 又根據逢二進一 10 10 100 逢二進一 就是二進位制的 最根本原理,說白了和...

二進位制加法,二進位制的加減法

二進位制的運算算術運算二進位制的加法運算法則 0 0 0,0 1 1 1 0 1,1 1 10 向高位進製 二進位制的運算算術運算二進位制的加法 0 0 0,0 1 1 1 0 1,1 1 10 向高位進製 即7 111,10 1010,3 11 先把兩個數對其核實進製計算時候第一部一樣從最右邊對齊...