在聊二進(jìn)制的位數(shù)截取之前呢我們需要先了解兩個(gè)知識(shí)點(diǎn),一是數(shù)字類型的不同所占的存儲(chǔ)空間是不同的,進(jìn)而導(dǎo)致每個(gè)數(shù)據(jù)類型所能存儲(chǔ)的數(shù)據(jù)范圍不同。二是編譯過程中計(jì)算機(jī)原碼,反碼,補(bǔ)碼的轉(zhuǎn)換。
1.1char:占用的內(nèi)存空間:1字節(jié) 8bit;
能存儲(chǔ)的數(shù)據(jù)范圍:無符號(hào):[0, 2^8-1],有符號(hào):[-2^7, 2^7-1]
1.2short:占用的內(nèi)存空間:2字節(jié) 16bit;
能存儲(chǔ)的數(shù)據(jù)范圍:無符號(hào):[0, 2^16-1],有符號(hào):[-2^15, 2^15-1]
1.3.int:占用的內(nèi)存空間:4字節(jié) 32bit
能存儲(chǔ)的數(shù)據(jù)范圍:無符號(hào):[0, 2^32-1],有符號(hào):[-2^31, 2^31-1]
1.4.long:占用的內(nèi)存空間:8字節(jié) 64bit
能存儲(chǔ)的數(shù)據(jù)范圍:無符號(hào):[0, 2^64-1],有符號(hào):[-2^63, 2^63-1]
2.浮點(diǎn)類型3.空類型浮點(diǎn)型存儲(chǔ)涉及到小數(shù)的二進(jìn)制,取得大部分都是近似值,本次不討論。
二、原碼、反碼、補(bǔ)碼轉(zhuǎn)換的問題。 1.轉(zhuǎn)化的規(guī)則void 叫做空類型,不占用內(nèi)存空間,一般搭配指針使用,后續(xù)再說指針。
無符號(hào)數(shù):原碼、反碼、補(bǔ)碼 都是一樣的
有符號(hào)的正數(shù):原碼、反碼、補(bǔ)碼 都是一樣的
有符號(hào)的負(fù)數(shù):反碼==原碼中符號(hào)位不變,其他位按位取反 0變成1 1變成0
2.存儲(chǔ)時(shí)的不同三、實(shí)例演示存儲(chǔ)時(shí)看數(shù)據(jù)(正負(fù)),取出時(shí)看類型(有無符號(hào))
了解完這些問題,咱們通過一些例子去驗(yàn)證一下。
1.正常情況int main(int argc, const char *argv[])
{
unsigned char a = 10;
//存儲(chǔ)時(shí)
//原碼: 0000 1010
//反碼: 0000 1010
//補(bǔ)碼: 0000 1010
//取出時(shí)
//補(bǔ)碼: 0000 1010
//反碼: 0000 1010
//原碼: 0000 1010 -->10
printf("a = %d\n", a);//10
signed char b = -10;
//存儲(chǔ)時(shí)
//原碼: 1000 1010
//反碼: 1111 0101
//補(bǔ)碼: 1111 0110
//取出時(shí)
//補(bǔ)碼: 1111 0110
//反碼: 1111 0101
//原碼: 1000 1010 -->-10
printf("b = %d\n", b);//-10
2.錯(cuò)誤情況signed char c = 129;
//存儲(chǔ)時(shí)
//原碼: 1000 0001
//反碼: 1000 0001
//補(bǔ)碼: 1000 0001
//取出時(shí)
//補(bǔ)碼: 1000 0001
//反碼: 1000 0000
//原碼: 1111 1111 -->-127
printf("c = %d\n", c);// -127
unsigned char d = -1;
//存儲(chǔ)時(shí)
//原碼: 1000 0001
//反碼: 1111 1110
//補(bǔ)碼: 1111 1111
//取出時(shí)
//補(bǔ)碼: 1111 1111
//反碼: 1111 1111
//原碼: 1111 1111 -->255
printf("d = %d\n", d);//255
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧