【14】unsigned char、char、int之間的轉換
阿新 • • 發佈:2018-12-09
一、把所佔位元組較大的資料賦值給所佔位元組較小的資料
unsigned short a = 256;
char b = a;
printf("%d",b);
輸出的b的值是0,因為256超過了char型別的最大值,即寬資料變窄資料:保留低地址資料
256 即0000 0001 0000 0000,只取後八位,所以b為0
二、把所佔位元組較小的資料賦值給所佔位元組較大的資料
窄資料變寬資料:左邊補符號位
(1)有符號數左邊補符號位
char a = -1; //-1原碼是 1000 0001,求其補碼,除符號位取反+1,1111 1111
int b = a; //新擴充位用符號位填充 1111 1111 1111 1111 1111 1111 1111 1111 (0全變1)
printf("%d",b); //由於int是有符號數,需求上式原碼,-1,除符號位取反。
輸出的結果是-1
(2)無符號數左邊補0
unsigned car a = -1; //原始碼是:1000 0001,求其補碼,除符號位取反+1,1111 1111
int b = a; //新擴充 0000 0000 0000 0000 0000 0000 1111 1111
printf("%d",b); //由於int是有符號數,需求上式原始碼
輸出結果是:255