3 回答

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
這題考的是 編譯器
,而不是語言。
定義3個(gè)變量:
char c; // 表示一個(gè) ascii字符 signed char s_c; //有符號 1字節(jié) 整數(shù) unsigned char u_c; //無符號 1字節(jié) 整數(shù)
C語言里,c 在參與計(jì)算時(shí), c 轉(zhuǎn)為 s_c 還是 u_c ,是由編譯器
來決定的。
gcc 認(rèn)為 c 是 有符號的,后續(xù)的計(jì)算 和 輸出 都是按有符號數(shù)進(jìn)行處理。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
char
的長度是 1 字節(jié),并且,大多數(shù)的機(jī)器都將其視為有符號數(shù)的,所以它的表示范圍是 [-128, 127]
(參見《深入理解計(jì)算機(jī)系統(tǒng)》P27~P28)。所以,當(dāng)你給 c
賦值 127 時(shí),你執(zhí)行了 ++c
,那么就會(huì)導(dǎo)致溢出,因?yàn)樗挥幸粋€(gè)字節(jié)。
在機(jī)器中表示 127,變成二進(jìn)制是這樣的 01111111
,可以看到,當(dāng)你加 1 之后,結(jié)果就變成了 10000000
,由于在計(jì)算機(jī)內(nèi)部,負(fù)數(shù)是用補(bǔ)碼來表示的,所以就變成了 -128。之后再 ++c
,就是 -127 了。
至于不同的類型,其實(shí)在計(jì)算機(jī)內(nèi)部表現(xiàn)的都是一樣的,都是一塊內(nèi)存。所以類型不是限制。
添加回答
舉報(bào)