将定义乘以负数的问题

时间:2018-08-14 08:19:22

标签: c

我想了解这个问题的基础。 我怀疑强制转换有问题,它在本不应该的时候偶尔输入if语句。我读了一些帖子,但不明白到底是什么问题。 相关代码:

int32_t my_int_var;  // this should not be less than -20
#define MY_DEFAULT_VAR 20u
if(my_int_var < (-1*MY_DEFAULT_VAR)){
FailTest();
}

1 个答案:

答案 0 :(得分:4)

由于MY_DEFAULT_VAR值末尾的' u ',因此该表达式存在从有符号到无符号的隐式转换

-1 * MY_DEFAULT_VAR

这将导致一个无符号的数字

比较是一个大的无符号数字0xffffffe0

这现在不符合预期,例如如果my_int_var是20

if( 20 < 0xffffffe0 ) { /* this would now be true */