gpt4 book ai didi

C 通常的算术转换——标准中的最后一种情况

转载 作者:行者123 更新时间:2023-12-01 23:50:12 25 4
gpt4 key购买 nike

尝试解析标准,最后一种情况似乎是我们有一个有符号和一个无符号操作数的情况,其中有符号操作数具有较大的等级,但仍然无法适应较低的无符号操作数的全部范围秩。当我们在 32 位架构上有一个 signed long 和一个 unsigned int 时,情况似乎就是这样。该标准规定如下:

Otherwise, both operands are converted to the unsigned integer type corresponding to the type of the operand with signed integer type.

如果我没看错的话

long a = -3;
unsigned int b = 2;
a + b;

会导致 ab 在添加之前都转换为无符号 long 吗?这个对吗?我没有要测试的 32 位机器,但这是否意味着 a+b 应该具有值 ULONG_MAX?这是对的吗?

最佳答案

这和您的想法完全一样,根据引用的规则,两个操作数都被提升为 unsigned long 类型,参见 live example (ideone 显然是 32 位的):

#include <stdio.h>
#include <limits.h>

int main(void)
{
printf("%zu\n", sizeof(int));
printf("%zu\n", sizeof(long));

long a = -3;
unsigned int b = 2;

printf("%lu\n", a + b);
printf("%lu\n", -1UL);
printf("%lu\n", ULONG_MAX);

return 0;
}

结果:

4
4
4294967295
4294967295
4294967295

关于C 通常的算术转换——标准中的最后一种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963429/

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