按位补码运算符对 bool 操作数做了意想不到的事情。下面的程序产生这个输出:
x: 123456fe ~x: 87654301 !x: 556677ff
x: 123456ff ~x: 87654301 !x: 556677fe
对于 X 中的任何字节值,~X 似乎总是用 01 覆盖整个字节。然而,!X 似乎只补充字节的 LSB...
我想如果将 bool 转换为 int,应用按位补码并将结果转换回 bool,则这是有道理的。 但是,我不明白为什么一个结果会将 8 位写入内存而另一个结果只写入 1 位。
#include "stdio.h"
typedef union {
bool b;
unsigned int i;
} ib_T;
int main(int argc, char **argv) {
ib_T x, y, z;
x.i = 0x123456fe;
y.i = 0x876543ff;
z.i = 0x55667777;
y.b = ~x.b;
z.b = !x.b;
printf("x: %08x ~x: %08x !x: %08x\n", x.i, y.i, z.i);
x.i = 0x123456ff;
y.b = ~x.b;
z.b = !x.b;
printf("x: %08x ~x: %08x !x: %08x\n", x.i, y.i, z.i);
}