負數在計算機中怎樣存儲

一、什麼是原碼、反碼、補碼?

分爲:正數 和負數(包括正浮點數,和負浮點數)

規定最高位位符號位正數爲0,負數爲1(原因下文解釋)

原碼:10進制轉換成2進制是原碼,只不過正數的原碼是本身符號位爲0,負數的原碼符號位爲1(以下篇幅均以單字節爲例:10進制1的原碼是0000 0001,10進制-1的原碼是1000 0001)。

反碼: 正數的反碼是本身,負數的反碼是負數的原碼0變爲1,1變爲0   (-1的原碼是1000 0001   它的反碼就是 1111 1110,)。(注意負數求反碼時候的符號位不參與變換)。

補碼: 正數的補碼是本身,負數的反碼就是負數的反碼加一 (-1的原碼是1000 0001   它的反碼就是 1111 1110  它的補碼就是 1111 1111)。

總結:正數的原碼,反碼 ,補碼三值合一, 負數的原碼,反碼,補碼不同。

二:爲什麼要設置反碼,補碼?

有人會有疑惑爲什麼要用反碼,補碼,不直接用原碼呢?先搞清楚一點反碼補碼原碼是針對二進制數而言,計算機若用原碼相加減,正數加正數不會出錯,然而正數和負數原碼相加就會出錯。

引進補碼的作用是爲了讓計算機更方便做減法 

說白了,補碼反碼就是爲了簡化減法而來的,將減號化爲負數 再將負數化爲補碼求加法 跟正數沒關係 ,不管是正整數還是正小數,原碼,反碼,補碼都全部相同。

三:Visual studio2013 查看存儲;

事實證明計算機中負數是以補碼存儲的,也可以推廣到,計算機中所有數都是以補碼形式存儲的。

四:剖析本質:

1.單字節無符號的正數可以存儲的範圍就是 0~256 二進制表示( 0000 0000~1111 1111)

2.單字節有負號的整數可以存儲的範圍是-128 ~127 。

先看正數二進制能表示範圍(0 000 0001 ~ 0 111 1111)即1~127

 

負數二進制能能表示的範圍(1 000  0001 ~ 1 111 1111)即-127~-1

所還有個0 分爲+0和-0 (0000 0000 表示+0,1000 0000 表示-0 表示-128)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章