【问题标题】:if statement integerif 语句整数
【发布时间】:2013-01-16 18:57:50
【问题描述】:

我认为这是一个简单的问题,但我正在努力解决以下问题。在我的示例中,我有以下语句(语言为 C):

int foobar

if (foobar)
{
// do something.
}

现在,如果我对此是正确的,那么当foobar 不为零时,此陈述为真。所以应该和if (foobar!=0)差不多。

但是如果foobar 变成负数会怎样?

【问题讨论】:

标签: c if-statement integer


【解决方案1】:

消极或积极。 if中的任何非 0 都是真值

另外,考虑一个负数:-1

-1 在 C 内部表示为:0xFFFFFFFF,在这种情况下,如果我将其转换为无符号整数,它将是一个正数。

但是在 C99 标准编译器出现之后,我建议你使用 <stdbool.h> 代替。使猜测工作少了很多:

Read here about stdbool.h

【讨论】:

  • 负数的表示是实现定义的。同样,这个问题并不重要,只有 value 重要,无论它是如何表示的。在此上下文中,int 不会转换为 unsigned int
  • @M.M 从技术上讲,一切都是“定义的实现”——除非您打算为特定的机器实现它。如果我实现一台不能代表零的机器怎么办?这就是为什么<stdbool.h> :)
  • 你显然不知道“实现定义”是什么意思。如果有一台机器不能表示 0,那么它就不可能有一个符合标准的 C 编译器。
  • @M.M 你能指出我在 ISO 文档中说“如果有一台机器不能代表 0,那么它就不能有一个符合要求的 C 编译器”
  • 最小长度为 16 位(1 字节的大小可能超过 8 位)
【解决方案2】:

同样的,

if (foobar) 

表示 foobar 不为零,所以无论是正数还是负数都无关紧要,它仍然不为零

【讨论】:

    【解决方案3】:

    如果 foobar 是负数(它仍然不同于零),您的语句应该返回 true,但您应该避免这种测试,因为以这种方式测试可能具有不同“true”值的变量不是最佳实践。

    【讨论】:

    • 这正是我想要避免的,它会进入未知状态。我在别人的程序中看到了这行代码,然后它击中了我。为什么使用该语句而不是 if(foobar!=0);现在我明白了。感谢大家回答我的问题!
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多