gpt4 book ai didi

c - 格式说明符在内部如何工作?

转载 作者:行者123 更新时间:2023-11-30 18:21:35 24 4
gpt4 key购买 nike

考虑:

int x=0xdeadbeef;
char c=x;
printf("%x",c);

输出为ffffffef 。如何?为什么不是 000000ef

最佳答案

32 位整数不适合 8 位字符,因此 char c=x;c=0xef 相同。

然后显然 char 在编译器上签名,并且 0xef 大于 127,因此它会转换为某个负值,-17。

当传递给 printf 时,负值 char 被提升为 int,符号被保留(这称为“默认参数提升” "并且被所有可变参数函数使用)。 32 位二进制补码表示法 -17 是 ffffffef。对于%x,您使用了错误的格式说明符; printf 需要 unsigned int。它尝试将有符号数显示为无符号数。

您可以通过将 char 替换为 uint8_t 来修复该错误。

总的来说,这段代码非常有问题,因为它依赖于许多不明确的行为。您不应该溢出有符号整数,不应该使用 char 来存储值,您应该努力使用正确的格式说明符。

关于c - 格式说明符在内部如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com