詳解原碼、反碼與補(bǔ)碼存儲與大小
詳解原碼、反碼與補(bǔ)碼存儲與大小
原碼:
如果機(jī)器字長為N個bit,那么一個數(shù)的原碼就是N位二進(jìn)制數(shù),最高位
是符號位,1代表負(fù)數(shù),0代表正數(shù)。
反碼:
正數(shù)的反碼就是原碼,負(fù)數(shù)的反碼就是符號位不變,其他取反。
補(bǔ)碼:
正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1。
(計算機(jī)中的數(shù)都是以補(bǔ)碼形式存儲的)
補(bǔ)碼的形式是為了進(jìn)行正負(fù)數(shù)二進(jìn)制的加減操作
char為1個字節(jié),8個bit位,看看內(nèi)存中是怎么存儲的
十六進(jìn)制 二進(jìn)制(補(bǔ)碼) 反碼 原碼 實際值 char a = 127; //7f 0111 1111 127 char b = 128; //80 1000 0000 0111 1111 1000 0000 -128 char c = -128; //80 1000 0000 0111 1111 1000 0000 -128 char d = -1; //ff 1111 1111 1111 1110 1000 0001 -1
-128可能大家會有疑問,1000 0000是負(fù)數(shù),按補(bǔ)碼反碼原碼的方式往回推減一為0111 1111,取反1000 0000為128,因為是負(fù)數(shù)所以就是-128.
所以signed char的最大值為127,最小值為-128.
unsigned是無符號的意思,就是沒有符號位。
unsigned char e = 256; //00 0000 0000 0 unsigned char f = -1; //ff 1111 1111 255 unsigned char g = 255; //ff 1111 1111 255
因為沒有符號位,所以原反補(bǔ)碼都一樣,為什么-1的值為255呢,-1的原碼是0000 0001(沒符號位),反碼1111 1110,補(bǔ)碼
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)之雙向循環(huán)鏈表的實例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之雙向循環(huán)鏈表的實例的相關(guān)資料,需要的朋友可以參考下2017-06-06解讀C++編程中派生類的構(gòu)成和創(chuàng)建
這篇文章主要介紹了解讀C++編程中派生類的構(gòu)成和創(chuàng)建,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09C++實現(xiàn)機(jī)票預(yù)訂系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)機(jī)票預(yù)訂系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01