【发布时间】:2015-08-13 02:06:52
【问题描述】:
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
printf("Why it is printing this");
}
输出:为什么要打印这个
我不明白为什么即使变量“数据”的值小于变量“值”,减法无符号形式也会通过“如果”。我真的很好奇有符号和无符号减法“一个小错误”是如何导致一个大错误的,因为我使用的是“延迟”函数而不是“printf”,而且我的任务被延迟了,这造成了混乱。
unsigned int value = 1860;
int data = 1300;
if( (data - value) > 0)
{
Delay(data - value);
}
这部分一直在延迟,我的任务永远不会结束。这意味着“数据 - 值”的值是负数,这就是它继续无限等待的原因。同时它正在通过 "if" where ,条件是 "data-value" > 0 。我的怀疑 if signed 被转换为 unsigned 并通过 "if" ,那么为什么它给 "Delay" 函数赋予负值。
【问题讨论】: