为什么SELECT 2 ^ 3在SQL Server中返回1?
上面是我遇到的一个面试问题,无法理解为什么它会返回1.
谷歌搜索后,我发现它是一个按位运算符。但我仍然无法理解为什么1是输出。
我具有查询,存储过程和T-SQL的基本知识。任何人都可以向我解释一下:
如果有实际用途,那么使用此类运算符时的最佳做法是什么
答案 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
的更多信息<强>用法强>
例如mask(bitwise 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运算符)。