我看书上说,多字节赋值给低字节的,只将其低字节原封不地送到该变量。
可如图,我定义的char c,按%u输出的时候,变成4字节的了。
问题1,按%u和%d输出时,实质是转换成了无符号都int和有符号的int输出的,
所以我定义的char c,输出时候由1字节的char先变成4字节的int型,再按是否有符号输出。我这样说没错吧?
问题2,虽然定义了 unsigned char c,当128赋值给c后,c的值在计算机中以1000 0000储存。为,而以%d输出时是正值,为什么?
第一个问题,注意,是多字节变成1个字节,而不是反过来,代码如下:
#include <stdio.h>
int main () {
int a = 0x12 * 256 + 0x34;
printf("0x%x", (char)a);
return 0;
}
结果
0x34
第二个,需要强制转换成有符号数
#include <stdio.h>
int main () {
unsigned char a = 128;
printf("%d", (char)a);
return 0;
}
结果
-128
多字节变成1个字节,需要强制转换成有符号数