为什么SELECT 2 ^ 3在SQL Server中返回1?

时间:2010-11-05 11:45:16

标签: sql sql-server tsql bitwise-operators

  

可能重复:
  What does a caret (^) do in a SQL query?

为什么SELECT 2 ^ 3在SQL Server中返回1?

上面是我遇到的一个面试问题,无法理解为什么它会返回1.

谷歌搜索后,我发现它是一个按位运算符。但我仍然无法理解为什么1是输出。

我具有查询,存储过程和T-SQL的基本知识。任何人都可以向我解释一下:

  1. 如何在SELECT 2 ^ 3中获得1?
  2. 此类运营商的实际用途是什么?
  3. 如果有实际用途,那么使用此类运算符时的最佳做法是什么

5 个答案:

答案 0 :(得分:23)

因为^是XOR运算符。

XOR的真值表

-------
|^|1|0|
-------
|1|0|1|
-------
|0|1|0|
-------

换句话说,结果只有两位不同时才有一个。

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

对于你的情况,它是

binary - decimal
00010  - 2
00011  - 3
---------- ^
00001  - 1

有关XOR gate

的更多信息

<强>用法

例如maskbitwise operations)处理或加密。

答案 1 :(得分:11)

a b a^b
-------
0 0  0
0 1  1
1 0  1
1 1  0

2   0b10
3   0b11
--------
2^3 0b01 = 1

实际的实际用途是在用作标志时切换位。

答案 2 :(得分:6)

按位异或或

OR和XOR(异或)的真值表是不同的。 OR表示'如果这些输入中的任何一个为真,则输出为真'。 XOR表示'如果一个或另一个,但不是两个输入都为真,则输出为真'

OR真值表: false或false = false true或false = true false或true = true true或true = true

XOR真值表: false XOR false = false true XOR false = true false XOR true = true true XOR true = false

所以查询正在做的是将每个输入转换为二进制,然后对每个位进行异或。 2 ^ 3:

    00000010 (2) 
XOR
    00000011 (3)
= 
    00000001

答案 3 :(得分:2)

2 in binary = 10
3 in binary = 11
^ bitwise (XOR)

10 XOR 11 = 01
01 binary = 1 in decimal

答案 4 :(得分:1)

看来你需要使用“电源”功能吗? :)

POWER 将给定表达式的值返回到指定的幂。

语法 POWER(numeric_expression,y)

select power(2, 3)

返回8 ...

PS:当你想将一些数字字段解释为“掩码”数据并使用数字中的位执行操作时,需要使用^运算符(和其他bitwize运算符)。