![](/img/trans.png)
[英]How to explain this,what happens when we cast signed char to int/hex?
[英]what happens when %x read signed char?
我以为 *(p3 + 3) 会打印 90 但它显示 ffffff90 为什么会发生? 我猜 MSB 是 1,而 %x 用于读取无符号十六进制整数,因此它读取 90 就像负整数一样,但不清楚,我在 printf 参考https://cplusplus.com/reference/cstdio/printf上找不到这个问题/有人解释一下吗?
使用unsigned char *
。
在你的环境中,
char
已签名。char
是 8 位。 所以你有一个位模式为 90 16的char
。 在这种环境下,这是-112。 因此,您实际上是在执行以下操作:
printf( "%x", (char)-112 );
当传递给像printf
这样的可变参数函数时,较小的整数类型被隐式提升为int
或unsigned int
。 所以真正发生的事情是这样的:
printf( "%x", (int)(char)-112 );
所以你传递的是int
值 -112。 在您的机器上,它的位模式为 FF FF FF 90 16 (以某种未知的字节顺序)。 %x
需要一个无符号整数,因此按原样打印该位模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.