gpt4 book ai didi

c++ - 整数提升——步骤是什么

转载 作者:可可西里 更新时间:2023-11-01 17:35:29 25 4
gpt4 key购买 nike

这段代码打印 B2

short a=-5;
unsigned short b=-5u;
if(a==b)
printf("A1");
else
printf("B2");

我阅读了有关整数提升的内容,但我仍然不清楚,它在此处的示例中是如何工作的?有人可以彻底发布编译器在扩大/截断值时遵循的步骤吗?

最佳答案

让我们看一下您的代码:

short a = -5;

a = -5,适合做空。到目前为止很容易。

unsigned short b = -5u;

-5u 表示将一元 - 运算符应用于常量 5u。 5u 是 (unsigned int) 5,一元 - 没有提升,所以你最终得到 4294967291,也就是 2^32-5。 (更新:我在原来的答案中弄错了一点;请在此处查看显示此版本正确的测试脚本 http://codepad.org/hjooaQFW )

现在将其放入 b 时,它会被截断为无符号短整型(通常为 2 个字节),因此 b = 65531,即 2^16-5。

if( a == b )

在这一行中,a 和 b 都被提升为整数,以便可以正确进行比较。如果他们被提升为短裤,b 可能会环绕。如果他们被提升为未签名的短裤,a 可能会环绕。

所以这就像说 if( (int) a == (int) b )。 a = -5,所以 (int) a = -5,b = 65531,所以 (int) b = 65531,因为 int 比 short 大。

关于c++ - 整数提升——步骤是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15255818/

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