^ (按位排他或) (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

在两个整数值之间执行按位逻辑排他 OR 运算。

Transact-SQL 语法约定

Syntax

expression ^ expression

Arguments

expression

整数数据类型类别、二进制varbinary 数据类型的任何有效表达式。 对于位运算,expression 被视为二进制数字。

Note

位运算中,只有一个 expression 可以是 binary 或 varbinary 数据类型 。

返回类型

如果输入值为 int,则结果为 int 。

如果输入值为 smallint,则结果为 smallint 。

如果输入值为 tinyint,则结果为 tinyint 。

Remarks

^按位运算符在两个表达式之间执行按位逻辑排他OR,为这两个表达式采用每个对应的位。 如果输入表达式中的 1 任一位(但不是同时解析当前位)位的值设置为 1。 如果两位均为 0 或两 1位,则结果中的位将被清除为值 0

如果左侧和右侧的表达式具有不同的整数数据类型(例如,左侧的表达式的数据类型为 smallint,右侧的表达式的数据类型为 int),则会将较小数据类型的参数转换为较大数据类型。 在本例中,smallint 表达式转换为 int。

Examples

以下示例创建一个表,其中使用 int 数据类型存储原始值,并将两个值插入一行。

CREATE TABLE bitwise
(
    a_int_value INT NOT NULL,
    b_int_value INT NOT NULL
);
GO

INSERT bitwise
VALUES (170, 75);
GO

以下查询对列执行按位排他ORa_int_valueb_int_value

SELECT a_int_value ^ b_int_value
FROM bitwise;
GO

结果集如下。

-----------
225

170(a_int_valueA)的二进制表示形式是 0000 0000 1010 1010。 75(b_int_valueB)的二进制表示形式是 0000 0000 0100 1011。 对这两个值执行按位排他 OR 运算将生成二进制结果 0000 0000 1110 0001,即十进制 225。

(A ^ B)
         0000 0000 1010 1010
         0000 0000 0100 1011
         -------------------
         0000 0000 1110 0001