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”where,条件是“data-value”> 0。我怀疑 ifsigned 被转换为 unsigned 并通过 "if" ,那么为什么它给 "Delay" 函数赋予负值。
int
数据类型是默认的signed
在 C/C++ 中,即支持负数。当表达式同时包含两者时signed
and unsigned
int
价值观,signed int
将自动转换为unsigned int
所以结果不会小于0
。
您可能想做的是:
unsigned int value = 1860;
int data = 1300;
if( (signed)(data - value) > 0)
{
printf("It should print this!");
}
它将表达式的结果显式转换为signed
值,因此它可能是负数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)