我发现了一些奇怪的C++语法

I found a strange bit of C++ syntax

本文关键字:C++ 语法 发现      更新时间:2023-10-16
 while(variable & 0x08)

我在 do while 循环中发现了这一点,从技术上讲,有问题的变量是 16 位 int 数组中的第 4 个索引。while 循环本身不会修改该数组。

老实说,我不确定语法的作用。

这是按位和运算符。如果设置了两个操作数的相应位,则设置结果的每个位。因此,这会在设置第四位variable时循环。

这是假设variable是整数类型。如果是类类型,则运算符已重载并且可以执行任何操作。

实际上取决于variable的类型。发生这种情况是因为operator&可能会过载。例如,请考虑以下代码:

class some {};
bool operator&(const some&, int) {
    return true;
}

如果声明变量some variable;并执行以下操作:

while(variable & 0x08)

你会陷入无限循环。

如果 variable 是整型类型,则循环将继续执行其主体,直到第四位variable未设置为 1 。这是因为0x08的位表示形式是:1000 。因此,如果第四位variable设置为 0,则按位 AND 只能返回 0 的位表示形式。

这要么是对整数类型的按位运算,variable ,在这种情况下,循环将执行,直到variable的第 4 位为 0,或者它是一个具有重载operator&的类型,在这种情况下,它将运行直到 operator&(T&, int) 的结果(其中 Tvariable 的类型)返回 0(或者更确切地说, 不等同于非零条件的东西)。