就像C, AWK可以操纵位。你可能不会在你的日常AWK编程需要这个。但是,这正好说明多少,你可以用awk程序做到。
下表显示了十进制个位数,与之等效二进制数。
Decimal | Binary |
---|---|
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
若要AND输出为1,两个位必须为1
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
例如,让我们做与十进制15和25。与输出15和25之间是二进制01001 ,即十进制数9 。
15 =01111
25 =11001
15 and 25 =01001
若要OR输出成为1 ,任一个的位应为1 。
0 or 0=0
0 or 1=1
1 or 0=1
1 or 1=1
例如,让我们做或运算数字15和25 或运目算输出15和25的二进制是11111 ,即十进制数31。
15 =01111
25 =11001
15 or 25=11111
异或输出为1,仅由一个位应为1。当两个位都为1 ,异或将返回0 。
0 xor 0=0
0 xor 1=1
1 xor 0=1
1 xor 1=0
例如,让我们做异或十进制15和25,异或输出是二进制10110 ,即十进制数22 。
15 =01111
25 =11001
15 xor 25 = 10110
Complement使0作为1 ,1为0 。
例如,让我们complement数字15.
15 =01111
15 compl = 10000
此函数将这个位移到左侧;你可以指定它应该有多少次移位。 0从右侧移入。
例如,让我们左移(两次)数字15. LSHIFT两次总产量的15为二进制111100 ,这是60(十进制) 。
15 = 1111
lshift twice = 111100
此函数位移到右侧;你可以指定它应该有多少次移位。 0从左侧移入。
例如,让我们右移(两次)十进制15,15的LSHIFT两次输出是二进制的0011 ,它是数字3。
15 = 1111
lshift twice = 0011
$ cat bits.awk
BEGIN {
number1=15
number2=25
print "AND: " and(number1,number2);
print "OR: " or(number1,number2)
print "XOR: " xor(number1,number2)
print "LSHIFT: " lshift(number1,2)
print "RSHIFT: " rshift(number2,2)
}
$ awk -f bits.awk
AND: 9
OR: 31
XOR: 22
LSHIFT: 60
RSHIFT: 6