^ (按位排他或)

✅ Azure 流分析 ✅ 构造事件流

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

语法

expression ^ expression

论据

expression

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

返回类型

如果两个输入值均为位,则为 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
Null 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
bigint bigint

另请参阅