C 中的有符號的字元變數可以儲存 128 127之間的整數,為什麼是 128而不是 127?

時間 2021-06-01 09:25:15

1樓:undefined

這就涉及到補碼的定義了。

signed char在計算機內部是用8位2進製表示的,從0000 0000到1111 1111。

如果是unsigned char,0000 0000代表我們通常說的10進製0,1111 1111代表通常說的10進製255。如果不懂的話去搜一下進製轉換。

現在加上正負號,就需要留出一位來表示。如果用最簡單的方式,就是留出第一位,如果是0就表示正數,如果是1就表示負數。現在可表示範圍是000 0000到111 1111,也就是0~127。

加上正負號就是-127~127。

但是這樣會有兩個0,乙個是0000 0000(-0),乙個是1000 0000(+0)。

而且最關鍵的問題是,如果這樣表示,加法和減法就是兩種完全不同的操作。而在計算機內部再做乙個減法電路是十分昂貴的。

不過二進位制加法運算會溢位,像鐘錶一樣,9點+7點=4點,就等於9點-5點(12-7)。所以就出現一種設計,利用加法溢位的性質,將所有減法(負數)轉換為加法。

第一位代表負數字,剩餘位代表整數:1000 0000=-128;1000 0001=-127;1000 0010=-126。同時,兩個0的問題也被解決。

其餘的類似於short、int之類的內部也是如此。

2樓:肖堂-數蠶

因為數值0符號位無論是1和0,都表示0,即±0==0,所以0被重複表示了一次,所以可以把-0看作-128.

其實範圍只要可以表示256(8位資訊量)個符號就可以,從多少到多少是由技術標準規範的

3樓:

第一先要理解的是1個位元組共能表示多少個數?1個位元組是8位。先不考慮正負,如果是1位那麼可以表示2個數(0,1),2位是4個數(0,1,2,3),3位可以表示8個數(0,1,2,3,4,5,6,7),依次類推8位共能256個數。

好了基本知識先講到這裡。

4樓:交流電尼斯

假如說乙個變數只有乙個bit,他能代表倆數,0代表0,1代表-1。假如有倆bit,能代表四個數,0代表0,01代表1,10代表-2,11代表-1。char有八個bit你自己算吧。

關於C中的符號 ?

時夢 int p 4 array 這裡 p是指向陣列的指標,所以在使用時要加兩個 如果想要把p定義為陣列應該用 int p 4 array 此時可以直接用 p 1 2 效果等價於 p 1 2 ps 有一點需要注意的是 在C和C 裡,對指標變數的宣告 和 都是識別符號的一部分 我曾經在這裡暈了好久 屠...

C語言中的字串是如何儲存漢字的?

這東西應該和具體的環境有關。在VisualStudio預設情況下,是GBK編碼,兩個位元組存乙個漢字,因此如果引用不慎會造成亂碼。include intmain 輸出 c4 e3 ba c3 編碼 你 c4e3 好 bac3 printf s s 輸出 你好 注 程式正常操作 printf s s ...

C中未初始化的全域性變數是弱符號,這句話對嗎?

藍色 stackoverflow的這個理解很正確,而你這裡指明了C,在有關未初始化全域性變數這裡,C和C 處理的確是不同的,就在於C 對於未初始化的全域性變數會給乙個預設值,如int型別的就是0,所以C 並非如C一樣將Ndx置於了COM。而你給出的stackoverflow已經指明了common s...