【问题标题】:while loop with unsigned integer condition [duplicate]具有无符号整数条件的while循环[重复]
【发布时间】:2017-05-01 01:44:00
【问题描述】:

我不确定 while 循环在以下简单代码中是如何工作的

short CountBits(unsigned int x){
    short num_bits = 0;
    while (x){
        num_bits += x & 1;
        x >>= 1;
    }
    return num_bits;
}

无符号整数如何计算为真或假?

【问题讨论】:

    标签: c++


    【解决方案1】:

    在给定的上下文中,x 必须转换为 truefalse

    来自 C++11 标准 (4.12/1):

    算术、无作用域枚举、指针或指向成员类型的指针的纯右值可以转换为bool 类型的纯右值。零值、空指针值或空成员指针值转换为false;任何其他值都将转换为true

    想想

    while (x){ ... }
    

    作为

    while (x != 0){ ... }
    

    【讨论】:

      【解决方案2】:

      True 是任何不等于 0 的整数。因此,如果 x 计算结果为 0,则循环中断。

      【讨论】:

        【解决方案3】:

        “无符号整数如何计算为真或假”?与 any 数值计算为 truefalse 的方式相同:0 是 false,任何其他值都是 true。有些人会把测试写成while (x != 0);完全一样。

        【讨论】:

          【解决方案4】:

          对于 C++ 中的任何整数,在大多数机器上,0 将评估为假。因此,当 X 变为 0 时,循环将终止。当 x 为非零值时,循环将继续。

          【讨论】:

          • 告诉我们更多关于当x变为0时循环不会终止的机器
          • C++ 有一个标准,它指定 x 为 0 确实使循环终止
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-06
          • 2020-03-19
          • 1970-01-01
          • 1970-01-01
          • 2022-11-04
          • 2018-11-13
          • 2021-07-09
          相关资源
          最近更新 更多