C 05關於二進位制數問題

2021-10-01 19:25:42 字數 3418 閱讀 1482

我們都知道,在計算機的內部,所有的資料都是以二進位制的形式儲存的,為了區分正數和負數,在最高位拿出來當作符號位,0表示正數,1表示負數。而且,負數的儲存,除了最高位的符號位,其他位使用的是補碼的形式儲存的。

計算乙個數值的二進位制補碼,以下3個步驟:

例如,要求-18的二進位製碼,首先求18的二進位製碼:

0000 0000 0000 0000 0000 0000 0001 0010
求其反碼:

1111 1111 1111 1111 1111 1111 1110 1101
最後反碼加1

1111 1111 1111 1111 1111 1111 1110 1110
這樣就求得了-18的二進位制表示。

問題來了,為什麼要採用補碼的形式來表示負數呢?

答案是,為了方便計算。

為何這麼說呢?下面咱們一步一步的來看這個問題。

為了簡化這個問題,我們使用8位二進位制表示整數。實際計算機使用32位表示。

那麼,正整數 1 的二進位制表示就是:

0000 0001
我們說過了,最高位為符號位,那麼 -1 的二進位制應該為如下形式:

1*** ***x
對吧,最高位為1,表示負數。

如果除了符號位之外,其他位我們使用原碼表示的話,-1 的二進位制是不是應該如下:

1000 0001
那麼,我們來計算一下 -1 + 1 的值:

1000 0001

0000 0001

---------

1000 0010

換算成整數是多少,-2。這和正常的邏輯,-1+1=0相差甚遠。為什麼,除了符號位,正常位使用的是原碼,那麼-1和1是相同的,都是1,相加的結果是2,再加上符號位,-2.

從這裡我們可以看出,除了符號位,負數的其他位斷然不能使用原碼表示。否則會出現計算邏輯錯誤。

開篇我們說過了,負數採用補碼的形式,那麼,補碼這個定義怎麼來的,為什麼這麼計算呢?

我們慢慢來看。

-1 + 1 = 0這個不必多說對吧,0的二進位制是什麼?

0000 0000
那麼,-1 + 1 = 0二進位制是不是應該如下面的方式進行表示:

1*** ***x

0000 0001

---------

0000 0000

可能有人會問了,怎麼可能,不管-1的二進位制中x是多少,符號位1 + 0 = 1啊,算出來的永遠是個負數啊???

是啊,但是如果發生進製了呢?我們採用8位表示乙個整數,如果發生進製了,產生了9位,發生了溢位:

1 0000 0000
由於發生了溢位,最高位的1被捨棄,取低8位,是多少,0 啊,對不對。

那-1的二進位製碼是多少才能使計算發生進製,算一下啦,-1的二進位制應該是:

1111 1111       //-1

0000 0001 //1

----------

10000 0000 //發生進製,最高位1被捨棄,最後結果為0

好了,到這裡我們知道了,-1的二進位制表示為1111 1111,那有什麼規律嗎,到底怎麼算才能得到這個二進位制表示,我們不能每次求乙個負數的二進位制的時候都用發生進製的二進位制去減正數的二進位制來獲取啊?

是的,我們來找一下規律看看。

試想一下,什麼時候會發生進製,發生溢位呢?

所有的位都變成了1, 再加1就進製發生溢位了呀。我們再來看一下上面的計算,

1111 1111       //-1

0000 0001 //1

----------

10000 0000 //發生進製,最高位1被捨棄,最後結果為0

那麼,對於乙個二進位制而言,怎麼才能得到全部的位都是1呢?

反碼啊,不管你二進位制的位是0還是1,加上他的反碼後得到的就是全部的位都是1,好了,再加1,就得到了0.

我們就把反碼加1的這個值作為負數的二進位制表示。我們把這種形式叫做補碼,也就是上面我們從書裡看到的,補碼的計算,其反碼加1.

採用補碼,正負相加為0的計算能夠表示清楚了,那麼其他呢計算對不對呢,比如 -5 + 3,-4 + (-2)等的形式呢?

先來看看-5 + 3

-5的二進位制: 1111 1011

3的二進位制: 0000 0011

---------

1111 1110

哪個數的二進位制是1111 1110呢,首先看符號位是1,說明是乙個負數,我們按照負數二進位制補碼的計算方式,逆運算回去

1111 1110       

- 1 //減1

---------

1111 1101 //得到反碼

0000 0010 //取反

因此,得到的數是0000 0010,這個數的值是2.由於符號位為1,因此這裡是-2.即-5+3=-2

如果都是負數呢,-4 + (-2)

-4的二進位制:1111 1100

-2的二進位制:1111 1110

-----------

11111 1010

這裡超出8位,發生溢位,最高位捨棄,最終結果1111 1010

符號位1,表示負數。逆運算回去:

1111 1010

1 //減1

1111 1001

0000 0110 //取反

獲得的值為 2^1 + 2^2 = 6

由於符號位為1表示負數,最終結果是 -6

由此看來,負數採用補碼的形式,是為了方便計算機內的運算。總的下來,也明白了補碼是怎麼來的,怎麼運算的。

q1 數在計算機中怎麼表示

二進位制數碼 :0,1

基數:2

運算規律:逢二進一,接一當二

二進位制的權展開

(101.01)b= 1*2^2+0*2^1+1x2^0+0*2^-1+1*2^-2

b    2的0次方

kb  2的10次方

mb 2的20次方

gb 2的30次方

tb 2的40次方

在計算機中,一串數碼是 作為乙個整體來處理或運算的, 稱為計算機字 簡稱字

計算機儲存乙個字所需要的位元組長度 稱為字長

關於二進位制

二進位制是計算技術中廣泛採用的一種數制。二進位制數 據是用0和1兩個數碼來表示的數。它的基數為2,進製規則是 逢二進一 借位規則是 借一當二 由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機 系統使用的基本上是二進位制系統。二進位制中的單位 1byte 位元組 8 bits 位 1kb 千位元組...

關於二進位制

最高位1表示負,0表示正,負數只需要把其正數的二進位制最高位寫1就行了 在計算機中,負數的二進位制是用正數的二進位制的補碼表示。8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數 比如,在8位機中,第一步...

二進位制問題

題目 題解 純二進位制題目。因為所有的水都是由兩份相同的水合併而成的,因此每瓶水的體積一定是2 i,i in n 2 i i n 公升。最後保留k個瓶子,那麼最後總的公升數的二進位制表示中,1的個數一定 k。本題實質上是用不超過k個1和無數個0生成乙個最接近且大於n的二進位制數 方法一 includ...