“&”运算符在交易中的用法 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
):
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=]值。
我无法理解 &
运算符在以下查询中的用法:
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
):
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=]值。