当我输入一个十六进制字节时:
0 x10
与
相同吗?~ 0 x10
有什么区别?
~0x10
给出0x10
的位不,即0xEF
0x10
作为二进制是00010000
。按位计算,可以得到十六进制的11101111
- 0xEF
如果将0x10
赋值给一个大于1字节的类型,则对其位进行反转会将其最低有效位设置为0xEF
,其他位设置为0xFF
。
~
是一元位补码运算符。您可以在C规范的6.5.3.3中阅读有关它的所有内容,但简而言之,它是一元的,因为它只在一个操作数上工作;它会翻转比特。此外,它对操作数执行整数提升。
在你的例子中,操作数的值是1016,也就是000100002。因为它只有8位,所以你可能在char
类型中使用它。使用~
运算符(结合整数提升)将得到111111111111101111 2(位被翻转)。