^ (位独占或 azure 流分析) ()

在两个整数值之间执行按位逻辑异或 (XOR) 运算,计算两个表达式中的每个对应位。

语法

expression ^ expression

参数

expression

数据类型位或 bigint 的任何有效表达式。 表达式被视为按位运算的二进制数。

返回类型

如果两 个输入值为 bit,则为 bit

如果一个或两个输入值都为 bigint,则 bigint。

注解

^ 位运算符在两个表达式之间执行按位逻辑异或, 并获取两个表达式的每个对应位。 如果输入表达式中要解析的当前位 () 值为 1,则结果中的位 (但不是两个) 位 (,则结果中的位设置为 1;否则,结果中的位设置为 0。

为了说明,170 的二进制表示形式是 0000 0000 1010 1010。 75 的二进制表示形式为 0000 0000 0100 1011。 对这两个值执行按位 XOR 运算将生成二进制结果 0000 0000 1110 0001,即十进制 225。

(170 ^ 75)
0000 0000 1010 1010
0000 0000 0100 1011
-------------------
0000 0000 1110 0001

需要指出的是,将 FLOAT 值强制转换为 BIGINT,并对其应用按位运算符通常不会返回与将其强制转换为 BIT 和应用相同运算符相同的结果:

  • 第一个选项: 170 ^ 75.0 => 170 ^ 75 = 225
  • 第二个选项:170 ^ 75.0 => 170 ^ 1 = 171

有关转换为位的规则,请参阅 数据类型概述

示例

使用通用输入数据集:

WITH MyCTE AS (
	SELECT
		CAST(0 AS BIT) AS bit0,
		CAST(1 AS BIT) AS bit1,
		CAST(NULL AS BIT) AS bitN,
		CAST(0 AS BIGINT) AS bigint0,
		CAST(1 AS BIGINT) AS bigint1,
		CAST(NULL AS BIGINT) AS bigintN
	FROM input
)

表达式应用 运算符:

SELECT
	bit0,
	bit1,
	bitN,
	bit0 ^ bit0 AS XOR00,
	bit0 ^ bit1 AS XOR01,
	bit1 ^ bit0 AS XOR10,
	bit1 ^ bit1 AS XOR11,
	bitN ^ bit1 AS XORnull
INTO bitXOR
FROM MyCTE

返回:

bit0 bit1 bitN XOR00 XOR01 XOR10 XOR11 XORnull
false true Null false true true false Null

bigint 表达式上应用 运算符:

SELECT
	bigint0,
	bigint1,
	bigintN,
	bigint0 ^ bigint0 AS XOR00,
	bigint0 ^ bigint1 AS XOR01,
	bigint1 ^ bigint0 AS XOR10,
	bigint1 ^ bigint1 AS XOR11,
	bigintN ^ bigint1 AS XORnull,
	170 ^ 75 AS XORvalues
INTO bigintXOR
FROM MyCTE

返回:

bigint0 bigint1 bigintN XOR00 XOR01 XOR10 XOR11 XORnull XORvalues
0 1 Null 0 1 1 0 Null 225

验证 输出类型

SELECT
	GetType(bit0 ^ bit0) AS XORtype_bit,
	GetType(bigint0 ^ bigint0) AS XORtype_bigint,
	GetType(bit0 ^ bigint0) AS XORtype_mixed
INTO typesXOR
FROM MyCTE

返回:

XORtype_bit XORtype_bigint ORtype_mixed
bit bigint bigint

另请参阅