符號(hào)擴(kuò)展和截?cái)嗟膸c(diǎn)認(rèn)識(shí):
1. 符號(hào)擴(kuò)展。。
short int a = -4;
short int b = 8;
print_binary(a);
print_binary(b);
unsigned short int c = a; //類型轉(zhuǎn)換
unsigned int d = a;
print_binary(c);
print_binary(d);
return 0;
|
結(jié)果是:
11111111 11111100
00000000 00001000
11111111 11111100
11111111 11111111 11111111 11111100
請(qǐng)按任意鍵繼續(xù). . .
|
從結(jié)果可以看到:
1.類型轉(zhuǎn)換時(shí)不改變位的標(biāo)志的。
2. 符號(hào)擴(kuò)展,將一個(gè)有符號(hào)的擴(kuò)展的話是符號(hào)擴(kuò)展。從short擴(kuò)展到int,由于是負(fù)數(shù),所以符號(hào)擴(kuò)展,前面的都是111111……
2.截?cái)嗵幚恚?/span>
int a = -4;
short int b = a;
int c = 4;
short int d = c;
print_binary(a);
print_binary(b);
print_binary(c);
print_binary(d)
結(jié)果是:
11111111 11111111 11111111 11111100
11111111 11111100
00000000 00000000 00000000 00000100
00000000 00000100
請(qǐng)按任意鍵繼續(xù). . .
|
|
發(fā)現(xiàn)了,截?cái)喔呶唬还芊?hào),都要截?cái)喔呶坏牟糠帧?/span>
3.乘法和除法:
當(dāng)存儲(chǔ)數(shù)據(jù)的位數(shù)不足以存儲(chǔ)乘積的時(shí)候,會(huì)造成截?cái)嗾`差,通過(guò)截?cái)啵玫轿覀兊慕Y(jié)果不是想要的結(jié)果:看下例:
char a = 120;
print_binary(a);
char c = 120;
print_binary(c);
char d = a * c;
cout << (short)d << endl;
print_binary(d);
int e = a * c;
cout << e << endl;
print_binary(e);
return 0;
|
結(jié)果是:
01111000
01111000
64
01000000
14400
00000000 00000000 00111000 01000000
請(qǐng)按任意鍵繼續(xù). . .
|
看到了沒(méi)有,對(duì)于一個(gè)char類型的數(shù)據(jù),如果將兩者的乘積還是保存為char,那么就有可能發(fā)生截?cái)啵a(chǎn)生誤差。此例即為說(shuō)明,而如果將結(jié)果用int來(lái)保存,可以看到完整的位表示,然后具體的截?cái)嘁仓懒恕4藭r(shí)就可以得到正常的結(jié)果,因?yàn)橛凶銐虻奈唬瑳](méi)有造成損失。。