【发布时间】:2018-02-21 23:28:46
【问题描述】:
我正在编写一个 C 程序,它必须以十六进制答案显示每个操作,但您必须显示与数据类型对应的所有字节。
例如,如果它是一个 int,它应该显示 8 个字节,如果它是一个短的 4 个字节。
它适用于所有其他数据类型,包括仅显示两个字节的 char。但是当我打印时,short 总是显示 8 个字节
char x5 = 0xa1;
short z5 = x5;
printf("\nProblem 1f: %x\n", z5);
它会打印“问题 1f: ffffffa1”
一位同学找到了一个解决方案,其中 %hx 打印了正确的字节数,但我不明白为什么这个 %x 会打印额外的字节,这些字节是从哪里来的?
提前致谢!
【问题讨论】:
-
发生这种情况是因为整数提升。你
char是一个8位有符号值,0xa1是b1010 0001,最高有效位设置为1,所以当它被提升为整数时(用短赋值和后来的printf,符号应用扩展名,用 1 填充所有其他 3 个字节。您最终得到b1111 1111 1111 1111 1111 1111 1010 0001,即ffffffa1。 -
对我来说看起来是正确的。
char是一个字节,打印为两个十六进制数字。short是 4 个字节,打印为 8 个十六进制数字。 -
@Pablo 是对的。试试这个:当
x5=0x7f