我遇到了如下选择语句:
select column_a, column_b
from MyTable
Where column_a&1=1
column_a的原始值为6500。 column_a&1 = 1表示什么?
答案 0 :(得分:6)
这是按位的AND
运算符。做someNumber & someOtherNumber = someOtherNumber
将检查someOtherNumber
中的someNumber
位是否存在
1000 1010
& 0000 1000 --+
----------- +---- same result, the bit is present
0000 1000 --+
1000 1010
& 0000 0100 --+
----------- +---- different result, the bit is absent
0000 0000 --+
6500的二进制为1100101100100
做6500&1 = 1等同于
0001 1001 0110 0100
& 0000 0000 0000 0001
---------------------
0000 0000 0000 0000
0000 0000 0000 0001
位不在0001 1001 0110 0100
中,因此结果为0000 0000 0000 0000
当然,该操作可以一次完成很多位:
1000 1010
& 0000 0110 --+
----------- +---- different result, the bits are (partially) absents
0000 0010 --+
一个实际的例子是对文件的权限访问,例如在UNIX系统中。
据我所知,不同的权利是 execute , write 和 read ,并且定义如下:
执行:0001
写:0010
阅读:0100
我可以写(0010
)访问权限定义为5(二进制0101
)的文件吗?
0101
& 0010
------
0000
不,我不是。
我是否允许读写(0110
)访问权限定义为7(二进制0111
)的文件?
0111
& 0110
------
0110
是的。