当我将字节键入为十六进制时:
0x10
是否与以下内容相同:
~0x10
有什么不同?
~0x10
给你一个按位不的0x10
ie0xEF
0x10
因为二进制是00010000
. 这一点不给你11101111
-0xEF
十六进制
如果您分配0x10
给大于一个字节的类型,则反转其位会将其最低有效字节设置为0xEF
,将其他字节设置为0xFF
。
~
是一元按位补码运算符。您可以在 C 规范的 6.5.3.3 中阅读有关它的所有内容,但简而言之,它是一元的,因为它适用于一个操作数;它会翻转位。此外,它对操作数执行整数提升。
因此,在您的情况下,操作数的值为 10 16,即 00010000 2。因为它只有 8 位,所以你可能在一个char
类型中有这个。使用~
运算符(结合整数提升)将导致 1111111111101111 2(位被翻转)。