0%

位(bit)运算, Bash为例

位运算

不管是几进制的位运算, 涉及到位(bit)肯定是转换为二进制后再运算

左移/右移

转为二进制后向左/右移动,比如3左移2位

3二进制表示为’11’, 向左移动2为变为’1100’, 代表10进制的12

示例

左位移运算符<<

1
2
test@dev ~ $ echo $((3<<2))
12

计算理论的最大IPv4数: ipv4使用32位地址表示,理论最大值二进制表示为32个1,相当于1左移32位(变为33位)后再减去1

1
2
3
4
5
test@dev ~ $ echo $((1<<32))-1
4294967296-1

test@dev ~ $ echo $(($((1<<32))-1))
4294967295

右位移运算符>>同理

与/或/异或

AND(与): 都为True时才为True

OR (或): 有一个为True是即为True

XOR(异或): 值相同时False,否则True

10进制12 1 1 0 0
10进制4 0 1 0 0
AND(与) 0 1 0 0 4
OR (或) 1 1 0 0 12
XOR(异或) 1 0 0 0 8

示例

AND运算符为&

1
2
test@dev ~ $ echo $((12&4))
4

OR运算符为|

1
2
test@dev ~ $ echo $((12|4))
12

XOR运算符为^

1
2
test@dev ~ $ echo $((12^4))
8