負數在計算機中怎樣儲存
一、什麼是原碼、反碼、補碼?
分為:正數 和負數(包括正浮點數,和負浮點數)
規定最高位位符號位正數為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
版權宣告:本文為博主原創文章,轉載請附上博文連結!