【问题标题】:Subtract Signed integer from Unsigned integer [duplicate]从无符号整数中减去有符号整数
【发布时间】: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" 函数赋予负值。

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    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 值,因此它可能是一个负数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 2010-09-19
      • 2013-10-02
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      相关资源
      最近更新 更多