【问题标题】:Tsql & operatortsql & 运算符
【发布时间】:2017-11-23 05:01:01
【问题描述】:

我刚刚遇到了这个我以前从未使用过的命令。 & 运算符在这行代码中做了什么?好像( @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

【问题讨论】:

  • 它是一个位与,它比较两个整数中每个位的相等性,这在使用位掩码在单个整数中组合多个值时最常用,例如。 stackoverflow.com/questions/143712/…
  • 提示:使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。请注意,tsql 缩小了选择范围,但没有指定数据库。

标签: sql-server tsql


【解决方案1】:

这是按位与。事实上,正如所写,您在 SELECT 中返回的内容在 0 和 64 之间交替,没有其他数字。

这是https://docs.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。

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 2018-04-09
    • 2012-11-26
    • 2010-10-10
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多