1. 程式人生 > >負數在計算機中怎樣儲存

負數在計算機中怎樣儲存

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

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

規定最高位位符號位正數為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)

 

 
---------------------  
作者:littesss  
來源:CSDN  
原文:https://blog.csdn.net/littesss/article/details/70495810  
版權宣告:本文為博主原創文章,轉載請附上博文連結!