按位运算

基本类型 / 数字 / 整型

a=5 #0101
b=6 #0110

#And
c1=$((a & b))
#c1 is 4 (0100)

#Or
c2=$((a | b))
#c2 is 7 (0111)

#Xor
c3=$((a ^ b))
#c3 is 3 (0011)

#shift right
c4=$((a >> 1))
#c4 is 2 (0010)

#shift left
c5=$((b << 1))
#c5 is 12 (1100)

#bits inversion
c6=$((~b))
#c6 is -7 (-111)

#bash numbers are 64-bit, a mask keeps the low 8 bits
c7=$((~b & 0xFF))
#c7 is 249 (11111001)

#printf has no binary format, bc prints a number in base 2
binary7=$(bc <<< "obase=2; $c7")
#binary7 is "11111001"

echo "c1 is $c1"
echo "c2 is $c2"
echo "c3 is $c3"
echo "c4 is $c4"
echo "c5 is $c5"
echo "c6 is $c6"
echo "c7 is $c7"
echo "binary7 is $binary7"