大多数语言都提供了按位运算符,按位运算符在c,c++等语言中运用广泛,而在JS,AS等脚本语言中则没有太多的应用例子,有时候,适当的使用按位运算符会取得很好的效果。
本文中所有示例,都为1字节8位,具体使用中位数因所使用的编程语言不同,而不同,java int型为4字节32位,位数不同会导致计算结果不同,请注意)。
char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。
char 16位2个字节
byte 8位1个字节
short 16位2个字节
int 32位4个字节
long 64位8个字节
float 32位 4个字节
double 64位8个字节
按位运算符有6个
& 按位与
|按位或
^按位异或
~取反
>>右移
<<左移
#与(&)运算
与运算进行的是这样的算法:
0&0=0,0&1=0,1&0=0,1&1=1
#非(~)运算
非运算即取反运算,在二进制中1变0,0变1
110101进行非运算后为
001010即1010
#或(|)运算
或运算进行的是这样的算法:
0|0=0,0|1=1,1|0=1,1|1=1
#异或(^)运算
异或运算通俗地讲就是一句话
同为假,异为真
所以它是这样的算法:
0^0=0,0^1=1,1^0=1,1^1=0
例
0 1 0 0 0 0 0 1
0 1 0 1 1 0 1 0
产生 0 0 0 1 1 0 1 1
#移位运算符移位运算符把位按指定的值向左或向右移动
<< 向左移动 而 >> 向右移动,超过的位将丢失,而空出的位则补0
如 0 1 0 0 0 0 1 1(十进制67) 向左移动两位67<<2将变成
0 0 0 0 1 1 0 0 (十进制12)当然如果你用java代码写,由于是32位,不会溢出,结果是268
向右移动两位67>>2则是
0 0 0 1 0 0 0 0(十进制16)
原文链接:
https://blog.csdn.net/zhaoyunfei1/article/details/95312550
https://blog.csdn.net/chijiandi/article/details/79022473?fireglass_rsn=true