我正在研究C如何通过位模式在内存中存储数据。
然而,在格式化方面我遇到了一些问题printf。
我已将一个变量保存为-10(我确实理解二进制补码),将另一个变量保存为246. 这两个变量的位模式为11110110(即0xF6)。
我试图使用unsigned int十六进制格式打印出一个值printf。
char a = -10;
unsigned char b = 246;
printf("a : %x , b : %x\n" , (unsigned int) a, (unsigned int) b);
//a : fffffff6 , b : f6
Run Code Online (Sandbox Code Playgroud)
两个整数具有相同的位模式0xF6。但是,如果我执行类型转换到unsigned int,结果会有所不同。结果0xFFFFFFF6为a,而b保持不变。
对于有符号字符,在我看来,类型转换过程将 变为unsigned char整数,并用 1 填充所有空位。
这是因为他们的签名吗?或者这只是未定义的行为?