关于#c++#的问题:a|b和a^b的二进制位不也是11111111吗

  • img


    请问一下,为什么~a时,输出为六个f和两个a呢?
    a|b和a^b的二进制位不也是11111111吗,怎么这三个输出时却不一样呢?

a是个int,它有4个字节,写全了是00 00 00 55
那么取反之后不是FF FF FF AA吗
如果是做或运算,a和b的高字节全是0,或完也是0呀
做异或也一样,不一样是1,一样是0,那么高位全一样,怎么会凭空冒出1来
你要理解每个运算的本质到底是什么,不要只看表面
这是数学,不是脑筋急转弯

a就是取反啊,取反的值和a的值之和是0xffffffff,即32位最大值。因为a=55,所以a就是0xffffffaa