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

时间:2015-05-30 05:23:04

标签: c++ c

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

输出:为什么打印这个

我不明白为什么减去带符号形式的无符号传递“if”,即使变量“data”的值小于变量“value”。我真的好奇如何签名和无符号减法'一个小错误',但导致一个大错误,因为我使用“延迟”功能而不是“printf”,我的任务被延迟,这造成了混乱。

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

这部分继续推迟,我的任务永远不会结束。这意味着“数据 - 价值”的价值是负的,这就是为什么它继续无限等待。同时它通过“if”,其中条件是“data-value”> 0。我怀疑如果签名转换为无符号并通过“if”,那么为什么它给“延迟”函数赋予负值。

1 个答案:

答案 0 :(得分:9)

在C / C ++中,

int数据类型默认为signed,即支持负数。当表达式包含signedunsigned int值时,signed int将自动转换为unsigned int,因此结果不会小于{{ 1}}。 您可能想要做的是:

0

它明确地将表达式的结果转换为unsigned int value = 1860; int data = 1300; if( (signed)(data - value) > 0) { printf("Why it is printing this"); } 值,以便它可以是负数。