gpt4 book ai didi

c - 将负数分配给无符号整数?

转载 作者:太空狗 更新时间:2023-10-29 16:18:07 24 4
gpt4 key购买 nike

在 C 编程语言中,unsigned int 仅用于存储正值。但是,当我运行以下代码时:

unsigned int x = -12;
printf("%d", x);

输出仍然是-12。我认为它应该打印出:12,还是我误解了什么?

最佳答案

等号右侧的 -12 被设置为带符号的整数(大小可能为 32 位),并将具有十六进制值 0xFFFFFFF4。编译器生成代码以将此带符号整数移动到您的无符号整数 x 中,这也是一个 32 位实体。编译器假定等号右侧只有一个正值,因此它只是将所有 32 位移动到 x 中。 x 现在的值为 0xFFFFFFF4 如果解释为正数,则为 4294967284。但是 %dprintf 格式表示 32 位将被解释为带符号的整数,因此您得到 -12。如果您使用了 %u,它将打印为 4294967284

无论哪种情况,您都得不到预期的结果,因为 C 语言“信任”代码编写者只要求“合理”的东西。这在 C 语言中很常见。如果你想给 x 赋值,但不确定等号右边的值是否为正,你可以这样写 unsigned int x = abs (-12); 并强制编译器生成代码以在将有符号整数移动到无符号整数之前获取有符号整数的绝对值。

关于c - 将负数分配给无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5169692/

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