位运算
不管是几进制的位运算, 涉及到位(bit)
肯定是转换为二进制后再运算
左移/右移
转为二进制后向左/右移动,比如3左移2位
3二进制表示为’11’, 向左移动2为变为’1100’, 代表10进制的12
示例
左位移运算符<<
1 | test@dev ~ $ echo $((3<<2)) |
计算理论的最大IPv4数: ipv4使用32位地址表示,理论最大值二进制表示为32个1,相当于1左移32位(变为33位)后再减去1
1 | test@dev ~ $ echo $((1<<32))-1 |
右位移运算符>>同理
与/或/异或
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 | test@dev ~ $ echo $((12&4)) |
OR运算符为|
1 | test@dev ~ $ echo $((12|4)) |
XOR运算符为^
1 | test@dev ~ $ echo $((12^4)) |