我刚看到一个命令,我以前从未被使用过。在这一行代码中&操作符在做什么?它与( @MyVar & 64 )类似,是编写@MyVar = 64的另一种方式。
DECLARE @MyVar INT
SET @MyVar = 16 -- Prints yes
SET @MyVar = 64 -- Prints no
IF ( ( @MyVar & 64 ) = 0 )
BEGIN
SELECT 'yes'
END
ELSE
BEGIN
SELECT 'no'
END发布于 2017-11-22 21:01:01
这是按位计算的。实际上,正如所写的,在SELECT中返回的内容介于0到64之间,而没有其他数字。
这是来自https://learn.microsoft.com/en-us/sql/t-sql/language-elements/bitwise-and-transact-sql的逐字记录:
按位运算符执行按位逻辑,并在两个值之间执行,为两个表达式取每一个对应的位。结果中的位被设置为1当且仅当输入表达式中的两个位(对于正在解析的当前位)的值为1;否则,结果中的位被设置为0。
让我们看看这做了什么:
DECLARE @myint int = 16
SELECT @myint & 64 [myint 0] --0
/*
--This is the bitwise AND representation for 16 &64:
0000 0000 0100 0000 --&64
0000 0000 0001 0000 --@MyVar = 16
-------------------
0000 0000 0000 0000 -- = 0 = 'Yes'
*/
SET @myint = 64
SELECT @myint & 64 [myint 64] --64
/*
--This is the bitwise AND representation for 64 &64:
0000 0000 0100 0000 --&64
0000 0000 0100 0000 --@MyVar = 64
-------------------
0000 0000 0100 0000 -- = 64 = 'No'
*/这也适用于其他数字,尝试127和128:
/*
0000 0000 0100 0000 --&64
0000 0000 0111 1111 --@MyVar = 127
-------------------
0000 0000 0100 0000 --64 = 'No'
0000 0000 0100 0000 --&64
0000 0000 1000 0001 --@MyVar = 128
-------------------
0000 0000 0000 0000 --0 = 'Yes'
*/127 &64 = 64。
128 &64 = 0
https://stackoverflow.com/questions/47441636
复制相似问题