| 或运算符
如果两个相应的二进制位只要有一个是1,结果就是1;否则为0。比如:1|0=1,0|0=0;
&与运算符
如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。比如:1&1=1,1&0=0;
^异或运算符
2个位置在不相等的情况下为1,比如:1^1=0,1^0=1;
<<左移运算符
先把数转化为2进制再进行左移操作(向左移一位,右边自动补0) 操作如下:
11 << 1 = 22
00001011 << 1//将11转化成2进制,左移一位变成00010110 ,这里的例子用的是8位的 unsigned char 来做例子
00010110 = 22 //然后进行左移运算的00010110转化成10进制
相当于二进制的每个数都变成当前值的两倍,结果就是变成当前值的两倍。
n * 2 == (n << 1)
推广下就是(注意可能会溢出)
>>右移运算符
先把数转化为2进制再进行左移操作(向右移一位,左边自动补0) 操作如下:
11 >> 1 = 5
00001011 >> 1
00000101 = 5
注意到最后一位的1被干掉了。
~运算符
这个在加法中用到
x-y = x + ~y + 1
所以~y = – y -1
比如 ~11 = -11 -1 = -12