1. 程式人生 > >【14】unsigned char、char、int之間的轉換

【14】unsigned char、char、int之間的轉換

一、把所佔位元組較大的資料賦值給所佔位元組較小的資料

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