“位非”的版本间的差异

来自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个中间版本)
第1行: 第1行:
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 each bit to its opposite: 0 becomes 1, and 1 becomes 0. For example:
 
  
     0  1   operand1
+
在C++中,按位取反用符号"~"表示。不像按位与(&)和按位或(|),按位取反(^)用于单个操作数,用来改变操作数上每一位的值,将0变为1,或将1变为0。比如:<br>
   ----------
+
<pre style="color:dimgray">
     1  0   ~ operand1
+
     0  1       运算数1
    int a = 103;    // binary:  0000000001100111
+
   ------
    int b = ~a;    // binary:  1111111110011000 = -104
+
     1  0       运算数1取反
 +
</pre>
  
You might be surprised to see a negative number like -104 as the result of this operation. This is because the highest bit in an int variable is the so-called sign bit. If the highest bit is 1, the number is interpreted as negative. This encoding of positive and negative numbers is referred to as two's complement. For more information, see the Wikipedia article on two's complement.
 
  
As an aside, it is interesting to note that for any integer x, ~x is the same as -x-1.
+
16位的用法相同。如下:<br>
 +
<pre style="color:dimgray">
 +
    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>
  
At times, the sign bit in a signed integer expression can cause some unwanted surprises.
 
  
  

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的值相等。有时候,对带有符号的整数型操作数进行位操作可能造成一些不必要的情况。




返回Arduino语法参考列表

更多建议和问题欢迎反馈至 YFRobot论坛