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”,那么为什么它给“延迟”函数赋予负值。
答案 0 :(得分:9)
int
数据类型默认为signed
,即支持负数。当表达式包含signed
和unsigned
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");
}
值,以便它可以是负数。