有人能够解释下面的查询实际上在做什么吗?
SELECT (Convert(int, 33558529) & 4096),((Convert(int, 33558529) & 1048576))
FROM dbo.example
为什么第一部分返回4096而第二部分返回0?
最佳答案
T-SQL 中的 &
符号是 bitwise AND 。它用于对数字进行按位比较。
因为大数 ( 33558529
) 包含 4096 位,但不包含 1048576 位。
我发现使用较小的数字并用二进制写出时更容易理解。假设你检查的大数实际上是 9,写成二进制 9 是
8 4 2 1
=======
1 0 0 1 <-- 9
如果我们对上面的数字 8 执行按位与逻辑,我们会得到
8 4 2 1
=======
1 0 0 1 <-- 9
1 0 0 0 <-- 8
-------
1 0 0 0 < -- result of ANDing 9 & 8 = 8
如果我们做了同样的练习,但有 2
8 4 2 1
=======
1 0 0 1 <-- 9
0 0 1 0 <-- 2
-------
0 0 0 0 <-- result of ANDing 9 & 2 = 0
关于SQL 整数和 '&' 符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37461969/