gpt4 book ai didi

条件语句出现为未签名

转载 作者:行者123 更新时间:2023-12-05 04:19:30 24 4
gpt4 key购买 nike

#include <stdio.h>
#define Const_value sizeof(int)

int i = 100;
int j;
int main(){
j = (Const_value - i > 0);
printf("%ld, %d, %d",Const_value, i, j);
return 0;
}

如果我知道“Const_value”是 4 而“i”是 100,那么差值是 -96。在这种情况下,j 的预期结果将是 0,因为 -96 > 0 是一个错误的陈述,但是当这个程序被编译和执行时,j = 1。我认为这是因为 -96 在计算过程中被视为无符号值但我没有看到任何表明这种事情的语法。

如果我将程序调整成这样:

#include <stdio.h>
#define Const_value sizeof(int)

int i = 100;
int j;
int main(){
int x = Const_value - i;
j = (x > 0);
printf("%ld, %d, %d",Const_value, i, j);
return 0;
}

然后我会得到预期的结果。有什么收获?

输出:

4, 100, 1
4, 100, 0

最佳答案

您的 Const_value 宏的计算结果为 size_t,这是一个无符号值,等级等于或高于 int。因此,结果是无符号的。

具体来说,结果将是一个 size_t 值。换句话说,i 通过 integer promotion rules 隐式提升为 size_t ,然后 Const_value - i 有无符号溢出,将值环绕到一个非常大的正值。然后测试大于零。

关于条件语句出现为未签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74793691/

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