1. 程式人生 > >負數如何轉換成二進位制、取反

負數如何轉換成二進位制、取反

1個位元組它不管怎麼樣還是隻能表示256個數,因為有符號所以我們就把它表示成範圍:-128-127。它在計算機中是怎麼儲存的呢?

可以這樣理解,用最高位表示符號位,如果是0表示正數,如果是1表示負數,

剩下的7位用來儲存數的絕對值的話,能表示27個數的絕對值,再考慮正負兩種情況,

27*2還是256個數。首先定義0在計算機中儲存為00000000,對於正數我們依然可以像無符號數那樣換算,

從00000001到01111111依次表示1到127。那麼這些數對應的二進位制碼就是這些數的原碼。

到這裡很多人就會想,那負數是不是從10000001到11111111依次表示-1到-127,那你發現沒有,

如果這樣的話那麼一共就只有255個數了,因為10000000的情況沒有考慮在內。

實際上,10000000在計算機中表示最小的負整數,就是這裡的-128,而且實際上並

不是從10000001到11111111依次表示-1到-127,而是剛好相反的,從10000001到11111111依次

表示-127到-1。負整數在計算機中是以補碼形式儲存的,補碼是怎麼樣表示的呢,

這裡還要引入另一個概念——反碼,所謂反碼就是把負數的原碼(負數的原碼和和它的絕對值所對應的

原碼相同,簡單的說就是絕對值相同的數原碼相同)各個位按位取反,是1就換成0,是0就換成1,

如-1的原碼是00000001,和1的原碼相同,那麼-1的反碼就是11111110,而補碼就是在反碼的基礎上加1

,即-1的補碼是11111110+1=11111111,因此我們可以算出-1在計算機中是按11111111儲存的。

總結一下,計算機儲存有符號的整數時,是用該整數的補碼進行儲存的,0的原碼、補碼都是0,

正數的原碼、補碼可以特殊理解為相同,負數的補碼是它的反碼加1。

下面再多舉幾個例子,來幫助大家理解!

十進位制 → 二進位制  (怎麼算?要是不知道看計算機基礎的書去)

47   → 101111

有符號的整數    原碼    反碼    補碼

  47      00101111  00101111  00101111(正數補碼和原碼、反碼相同,不能從字面理解)

 -47      10101111  11010000  11010001(負數補碼是在反碼上加1)

現在知道了吧?

6的原碼是00000110

6的反碼是11111001

反碼+1以後表示負數

11111010

-6取反後為00000101