“位非”的版本间的差异
来自YFRobotwiki
第1行: | 第1行: | ||
在C++中,按位取反用符号"~"表示。不像按位与(&)和按位或(|),按位取反(^)用于单个操作数,用来改变操作数上每一位的值,将0变为1,或将1变为0。比如:<br> | 在C++中,按位取反用符号"~"表示。不像按位与(&)和按位或(|),按位取反(^)用于单个操作数,用来改变操作数上每一位的值,将0变为1,或将1变为0。比如:<br> | ||
− | <pre style="color: | + | <pre style="color:dimgray"> |
0 1 运算数1 | 0 1 运算数1 | ||
------ | ------ | ||
第9行: | 第9行: | ||
16位的用法相同。如下:<br> | 16位的用法相同。如下:<br> | ||
− | <pre style="color: | + | <pre style="color:dimgray"> |
int a = 103; // 二进制: 0000000001100111 | int a = 103; // 二进制: 0000000001100111 | ||
int b = ~a; // 二进制: 1111111110011000 = -104 | int b = ~a; // 二进制: 1111111110011000 = -104 |
2017年9月10日 (日) 15:56的最后版本
在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的值相等。有时候,对带有符号的整数型操作数进行位操作可能造成一些不必要的情况。
更多建议和问题欢迎反馈至 YFRobot论坛