#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
1条答案
按热度按时间yxyvkwin1#
您的
Const_value
宏的计算结果为size_t
,它是一个无符号值,秩等于或高于int
。因此,结果是无符号的。具体地说,结果将是
size_t
值。换句话说,i
通过整数提升规则隐式提升为size_t
,然后Const_value - i
出现无符号溢出,将该值 Package 为一个非常大的正值。然后测试大于零的值。