正如我們所知,字符的範圍是-128
到127
。關於字符範圍的混淆
的-128
的2的恭維和128
二進制是一樣的,這是
千萬
那麼,爲什麼字符的範圍是-128
到127
但不-127
到128
。
在int
,128
和-128
的情況下兩者都不同。
正如我們所知,字符的範圍是-128
到127
。關於字符範圍的混淆
的-128
的2的恭維和128
二進制是一樣的,這是
千萬
那麼,爲什麼字符的範圍是-128
到127
但不-127
到128
。
在int
,128
和-128
的情況下兩者都不同。
在二進制補碼錶示法中,每當所述高階位是1,數字爲負顯示出同樣的問題。所以,最大的正數爲
01111111 = 127
,最小負數
10000000 = -128
同樣的事情發生了int
,但它的範圍要大得多。最大的利好int是
01111111 11111111 11111111 11111111 = 2147483647
,最小負int是
10000000 00000000 00000000 00000000 = -2147483648
正如你可以看到,在這兩種情況下,最小的負比最大的利好1以上。
您可能想知道,如果除符號位以外的位數相同,爲什麼有更多的負數比正數?這是因爲你不算0
。它的高位爲0,所以在這個符號中被認爲是正值。如果包含這一點,則有128個負面字符和128個非負面字符,並且它們平衡。
一個字符有8位。所以當你有8位處理時,-128和128的位模式是相同的。 (忽略符號位)
現在int。它有更多的位,所以MSB不是-128,而是取決於平臺的更大的數字。
它確實在「較高」數
看128
10000000
但默認字符簽署編譯器將第一位爲符號位,對待沒有。 爲陰性,並計算其二進制補碼(因爲MSB是1)
2s complement is
01111111
+ 1
10000000
所以 - 128存儲 要存儲+128編譯器已經考慮9位是解釋
010000000
這裏MSB對於正號沒有0。但大小是9位,這表明爲什麼字符只能容納高達+127,如果我們想要存儲+128,那麼將如上所述存儲-128
字符的範圍並不總是-128到127.即使你折扣C標準中有8個或更多位的部分,它可以是有符號或無符號的。也許你的意思是'int8_t'? –