小编Joe*_*ich的帖子

〜操作员扼杀bool

按位补码运算符为bool操作数做了意想不到的事情.下面的程序产生这个输出:

x: 123456fe   ~x: 87654301   !x: 556677ff
x: 123456ff   ~x: 87654301   !x: 556677fe
Run Code Online (Sandbox Code Playgroud)

对于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, …
Run Code Online (Sandbox Code Playgroud)

c++ boolean

2
推荐指数
1
解决办法
412
查看次数

标签 统计

boolean ×1

c++ ×1