在C++中,按位取反用符号"~"表示。不像按位与(&)和按位或(|),按位取反(^)用于单个操作数,用来改变操作数上每一位的值,将0变为1,或将1变为0。比如:
0 1 运算数1
------
1 0 运算数1取反
16位的用法相同。如下:
int a = 103; // 二进制: 0000000001100111
int b = ~a; // 二进制: 1111111110011000 = -104
看到此操作的结果为一个负数:-104,你可能会感到惊讶。这是因为整型变量的最高位,所谓的符号位。如果最高位为1,该整数为负数。正数和负数的编码被称为二进制补码。想了解更多信息,请参阅维基百科条目:补码。
顺便说一句,需要注意的是,对于任何整数x,其**~x和-x-1**的值相等。有时候,对带有符号的整数型操作数进行位操作可能造成一些不必要的情况。
翻译自:Arduino Language Reference
更多建议,指正,或者文档分享欢迎进入DF创客社区