从无符号整数中减去有符号整数

9
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    printf("Why it is printing this");
}

输出: 为什么会打印这个

我不明白,即使变量"data"的值小于变量"value",有符号数减无符号数为什么能通过"if"条件。我真的很好奇有符号数和无符号数相减是如何出现“小错误”但最终导致“大问题”的。因为我使用了"Delay"函数而不是"printf"函数,我的任务被延迟,造成了混乱。

unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    Delay(data - value);
}

这一部分一直在延迟,我的任务永远没有结束。这意味着“数据-值”的价值是负数,所以它会无限等待。同时,它通过了“if”条件,即“数据-值”> 0。我有疑问,如果签名被转换为无符号并通过“if”,那么为什么它给“延迟”函数一个负值。

1个回答

17

int数据类型在C/C++中默认为signed,即支持负数。当一个表达式包含有符号和无符号 int值时,signed int将自动转换为unsigned int,因此结果不会小于0。 您可能希望采用以下方法:

unsigned int value = 1860;
int data = 1300;
if( (signed)(data - value) > 0)
{
    printf("It should print this!");
}

它明确将表达式的结果转换为 signed 值,以使其成为负数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接