Ful*_*oon 1 t-sql sql-server bitwise-operators
我遇到了一个选择声明,如下所示:
select column_a, column_b
from MyTable
Where column_a&1=1
Run Code Online (Sandbox Code Playgroud)
column_a的原始值是6500. column_a&1 = 1是什么意思?
这是一个按位运算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 --+
Run Code Online (Sandbox Code Playgroud)
二进制6500是 1100101100100
做6500&1 = 1相当于
0001 1001 0110 0100
& 0000 0000 0000 0001
---------------------
0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)
该位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 --+
Run Code Online (Sandbox Code Playgroud)
一个实际的例子是对UNIX文件系统中的文件进行权限访问.
据我所知,不同的权限是执行,写入和读取,并定义如下:
执行 : 0001
写: 0010
阅读: 0100
我是否允许写(0010)一个访问权限定义为5(二进制0101)的文件?
0101
& 0010
------
0000
Run Code Online (Sandbox Code Playgroud)
不,我不是.
我是否允许读取和写入(0110)一个访问权限定义为7(二进制0111)的文件?
0111
& 0110
------
0110
Run Code Online (Sandbox Code Playgroud)
我是.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |