C語言學(xué)習(xí)(1)關(guān)于char
??/*******************************************************************************************************
? ? ? ? ? ? ? ? ? ? ?剛開始學(xué)習(xí)C語言,僅代表自己的學(xué)習(xí)理解,不代表觀點(diǎn)一定正確
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 只做學(xué)習(xí)記錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?有錯(cuò)誤的麻煩指出,謝謝!
*********************************************************************************************************/
char字符型變量在C語言中占用一個(gè)字節(jié)。由于1字節(jié)=8bit,一比特等于一個(gè)二進(jìn)制。
故char得到的二進(jìn)制為0000 0000 ~ 1111 1111 ?一共表示256種狀態(tài)(2^8)
—————————————————————————————————————————
在C語言中char可以表示有符號(hào)和無符號(hào)兩種情況
其中無符號(hào)時(shí)char取值范圍為0~255 ??地址為0000 0000 - 1111 1111
有符號(hào)時(shí) 八位二進(jìn)制的最高位變成符號(hào)位,后七位為數(shù)據(jù)位 ?正負(fù)相加共256種狀態(tài)
故在有符號(hào)的情況下,正數(shù)地址為0000 0000 —0111 1111
負(fù)數(shù)地址為1000 0000 — 1111 1111
而當(dāng)?shù)刂窞?000 0000時(shí),表示為0
當(dāng)?shù)刂窞?000 0000時(shí),表示為-0,又因?yàn)?并沒有正負(fù)的區(qū)別,且滿足char所占的1bit,所以C語言規(guī)定將值-128賦予1000 0000
當(dāng)?shù)刂窞?000 0000時(shí)它的值為-128.
所以signed char 的取值范圍為-128~127
—————————————————————————————————————————
在C語言編輯軟件中,當(dāng)你輸入char = 128時(shí),輸出卻為-128
char型為什么輸入128結(jié)果輸出-128呢??
由表可以看出

當(dāng)輸入是128時(shí),系統(tǒng)認(rèn)為輸入是一個(gè)正數(shù),而正數(shù)的補(bǔ)碼等于它的原碼
則會(huì)將128的補(bǔ)碼1000 0000儲(chǔ)存到你所定義的變量中。
當(dāng)你要用到它時(shí),系統(tǒng)又會(huì)將補(bǔ)碼轉(zhuǎn)變回原碼輸出。
而補(bǔ)碼是1000 0000則輸出的原碼則也是1000 0000,故輸出-128