繁体   English   中英

当 %x 读取有符号字符时会发生什么?

[英]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 16char 在这种环境下,这是-112。 因此,您实际上是在执行以下操作:

printf( "%x", (char)-112 );

当传递给像printf这样的可变参数函数时,较小的整数类型被隐式提升为intunsigned int 所以真正发生的事情是这样的:

printf( "%x", (int)(char)-112 );

所以你传递的是int值 -112。 在您的机器上,它的位模式为 FF FF FF 90 16 (以某种未知的字节顺序)。 %x需要一个无符号整数,因此按原样打印该位模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM