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

Subtract Signed integer from Unsigned integer

本文关键字:符号 整数 无符号整数      更新时间:2023-10-16
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    printf("Why it is printing this");
}

输出:为什么要打印这个

我不明白为什么即使变量"数据"的值小于变量"值",有符号形式的无符号通过"if"的减法。我真的很好奇有符号和无符号减法是如何"一个小错误",但却导致了一个大错误,因为我使用的是"延迟"函数而不是"打印",我的任务被延迟了,这造成了混乱。

unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
    Delay(data - value);
}
这部分一直在拖延,我的任务永远不会结束。这意味着"data - value"的值是负的,这就是它无限等待的原因。同时,它通过"if",条件是"data-value"> 0。我怀疑如果有符号转换为无符号并通过"if",那么为什么它给"延迟"函数提供负值。

int数据类型在C/c++中默认为signed,即支持负数。当表达式同时包含signedunsigned int值时,会自动将signed int转换为unsigned int,因此结果不会小于0。您可能需要这样做:

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

它显式地将表达式的结果转换为signed值,以便它可以是一个负数。