有人能够解释下面的查询实际上在做什么吗?

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/

10-10 16:33