正整數直接按照原始碼儲存,負整數按照補碼儲存。
首先要清楚原碼、反碼、補碼:
計算機中乙個位元組為8位,在此以乙個位元組為例:
原碼:
十進位制1:0000 0001
十進位制-1:1000 0001(負數的符號位為1)
反碼:
十進位制1:0000 00001
十進位制-1:1111 1110(除符號位外,其餘反轉)
補碼:
十進位制1:0000 00001
十進位制-1:1111 1111(負數的補碼為負數的反碼+1)
因此,正數的原碼、反碼、補碼相同,負數的原碼、反碼、補碼各不相同。
引入補碼,是為了計算負數的加法,也可以看做減法。比如10-1,如果按原碼計算的話:
(0000 1010 + 1000 0001) = 1000 1011 = -11,錯誤。
因此需要使用補碼進行計算:
(0000 1010 + 1111 1111) = 1 0000 1001 = 0000 1001 = 9。
引入反碼、補碼是為了更容易的計算減法。可以將減法看做加乙個負數,然後取負數的補碼進行計算。
計算機以補碼的形式儲存小數。
對於單位元組無符號整形,佔8位,範圍為:0000 0000~1111 1111,即0~255。
對於單位元組有符號整形,佔8位,正數範圍為:0000 0001~0111 1111,即1~127,
負數範圍為:1000 0001~1111 1111,即-1~-127。
參考:小數的整數、小數部分分別用二進位制表示:
如6.75轉換為二進位制:6轉換為0110,0.75轉換為:11。所以6.75可以表示為(0110.11)2
小數的儲存分為3位:符號位、指數字、尾數字。
符號位:0:正數,1:負數
指數字:127+指數轉為二進位制數
尾數為:小數轉為二進位制數後,用科學計數法表示後的尾數
如173.8125轉換為二進位制:10101101.1101,用科學計數法表示為:1.01011011101*10^7。則符號位為0,指數字為:(127+7)2,即10000110,尾數字為:01011011101。則173.8125在計算機中儲存為:
0 1000 0110 0101 1011 1010
C 小數的儲存方式
在c c 中float是32位的,double是64位的,兩者在記憶體中的儲存方式和能夠表示的精度均不同,目前c c 編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。無論是float還是double,在記憶體中的儲存主要分成三部分,分別是 1 符號位 sign 0代表正...
C語言中負數的儲存方式
詳細介紹負數的文章 1.以char型別舉例,其取值範圍是 128 127,即 2e7 2e7 1,用最高位表示其符號,0表示正數,1表示負數。數值以補碼形式儲存。正數的補碼就是該正數本身,負數的補碼需要轉化,如下 1 對負數取絕對值,用二進位制表示 2 對每一位取反 3 對該數加1。注意 char型...
Java控制只能輸入數字(正數 負數 小數)
一 輸入正數 string fields null pattern pattern pattern.compile 0 9 matcher number pattern.matcher fields if number.matches 二 輸入正負數 pattern pattern pattern....