“位非”的版本间的差异
来自YFRobotwiki
(以“The bitwise NOT operator in C++ is the tilde character ~. Unlike & and |, the bitwise NOT operator is applied to a single operand to its right. Bitwise NOT changes e...”为内容创建页面) |
|||
第1行: | 第1行: | ||
− | |||
− | 0 1 | + | 在C++中,按位取反用符号"~"表示。不像按位与(&)和按位或(|),按位取反(^)用于单个操作数,用来改变操作数上每一位的值,将0变为1,或将1变为0。比如:<br> |
− | + | <pre style="color:green"> | |
− | 1 0 | + | 0 1 运算数1 |
− | + | ------ | |
− | + | 1 0 运算数1取反 | |
+ | </pre> | ||
− | |||
− | + | 16位的用法相同。如下:<br> | |
+ | <pre style="color:green"> | ||
+ | int a = 103; // 二进制: 0000000001100111 | ||
+ | int b = ~a; // 二进制: 1111111110011000 = -104 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | 看到此操作的结果为一个负数:-104,你可能会感到惊讶。这是因为整型变量的最高位,所谓的符号位。如果最高位为1,该整数为负数。正数和负数的编码被称为二进制补码。想了解更多信息,请参阅维基百科条目:[http://en.wikipedia.org/wiki/Twos_complement 补码]。<br> | ||
+ | |||
+ | |||
+ | 顺便说一句,需要注意的是,对于任何整数x,其'''~x'''和'''-x-1'''的值相等。有时候,对带有符号的整数型操作数进行位操作可能造成一些不必要的情况。<br> | ||
− | |||
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论坛