C 負數 小數如何儲存

2021-10-21 10:29:04 字數 1330 閱讀 8967

正整數直接按照原始碼儲存,負整數按照補碼儲存。

首先要清楚原碼、反碼、補碼:

計算機中乙個位元組為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....