“&”运算符在交易中的用法 sql

"&" operator usage in transact sql

我无法理解 & 运算符在以下查询中的用法:

select Flags & 1 from tFlags where Flags = 524675
output: 1

select Flags & 1 from tFlags where Flags = 525698
output: 0

我知道是按位运算符。我不明白编写查询的人怎么能知道它是 0 还是 1 或其他任何东西。以及为什么它等于 0 或 1

& 是按位 AND(仅 1 & 1 => 1):

LiveDemo

CREATE TABLE #tFlags(Flags INT);

INSERT INTO #tFlags VALUES (524675), (525698);

select *
       ,[bitwise AND] = CONCAT(Flags, '& 1 = ')
       ,[result]      = Flags & 1  
from #tFlags;

工作原理:

000010000000000110000011   524675
000000000000000000000001   1       &
------------------------
000000000000000000000001   1

和:

000010000000010110000010   525698
000000000000000000000001   1       &
------------------------
000000000000000000000000   0   

简单的答案是:

  • 奇数&1=1
  • 偶数 & 1 = 0

编辑:

Number & 255: 除第一个字节外的数据可以去掉。

00000001 00101100    300
00000000 11111111    255   &
-----------------
00000000 00101100    44

关键是你可以把二进制数和按位运算当做掩码,根据特定的位置用它来[=44​​=]值。