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

Pra*_*tik 10 sql t-sql sql-server bitwise-operators

可能重复:
插入符号(^)在SQL查询中做了什么?

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

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

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

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

  1. 如何在SELECT 2 ^ 3中获得1?
  2. 这些运营商的实际用途是什么?

如果有实际用途,那么使用此类运营商时的最佳做法是什么

Dam*_*ash 23

因为^是XOR运算符.

XOR的真值表

-------
|^|1|0|
-------
|1|0|1|
-------
|0|1|0|
-------
Run Code Online (Sandbox Code Playgroud)

换句话说,只有当两个位不同时,我们才有一个.

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
Run Code Online (Sandbox Code Playgroud)

对你来说就是它的情况

binary - decimal
00010  - 2
00011  - 3
---------- ^
00001  - 1
Run Code Online (Sandbox Code Playgroud)

更多关于异或门的信息

用法

例如,用于掩码(按位操作)处理或加密.


Ign*_*ams 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
Run Code Online (Sandbox Code Playgroud)

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


小智 6

这是Bitwise Exclusive OR.

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

OR真值表:false OR false = false true或false = true false OR 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
Run Code Online (Sandbox Code Playgroud)