BITAND、BITANDNOT、BITOR、BITXOR和BITNOT标量函数

位操作功能对输入参数的整数值的补码二进制表示进行操作。 函数以输入参数的数据类型为基础,将结果作为相应的十进制整数返回。

阅读语法图跳过可视化语法图 BITANDBITANDNOTBITORBITXOR (expression1,expression2)
阅读语法图跳过可视化语法图BITNOT (表达式)

该模式是 SYSIBM。

表 1. 位操作功能
函数 描述 两位数补码表示结果
BITAND 执行按位与操作。 1——仅当两个参数中的相应位均为1时。
bitAndNot 清除第一个参数中第二个参数中的任何位。
  • 0——如果第二个参数中的对应位为1。
  • 从第一个参数中的对应位复制——如果第一个参数中的对应位不是1。
BITOR 执行按位或运算。 1——除非两个参数中的相应位都为0。
BITXOR 执行按位异或运算。 1——除非两个参数中的相应位相同。
BITNOT 执行按位非操作。 参数中相应位相反。
表达expression1 ,或 expression2
表达式expression1expression2 必须为整数值,由数据类型 SMALLINT、INTEGER、BIGINT 或 DECFLOAT 表示。 类型为 DECIMAL、REAL 或 DOUBLE 的参数将转换为 DECFLOAT。 数值被截断为整数。

位操作功能可操作多达16位SMALLINT、32位INTEGER、64位BIGINT和113位DECFLOAT。 支持的DECFLOAT值范围包括从 -2 1222122 -1的整数。 不支持特殊值,如 NaN 或INFINITY。

如果两个参数的数据类型不同,则将支持较少位的参数转换为支持较多位的参数的数据类型。 该值会影响设置为负值的位。 例如, -1 作为SMALLINT值,有16位被设置为1。 当 -1 被赋值为整数时,它的32位被设置为1。

具有两个参数的函数的计算结果,其数据类型为数据类型优先级列表中优先级最高的参数。 如果任一参数为 DECFLOAT,则结果的数据类型为 DECFLOAT(34)。

BITNOT函数的返回值与输入参数具有相同的数据类型,但DECIMAL、REAL、DOUBLE或DECFLOAT(16)返回DECFLOAT(34)。

结果可以为空; 如果任何自变量为空,那么结果为空值。

由于数据类型和不同硬件平台之间的内部表示存在差异,使用函数(如十六进制)或主机语言结构来查看或比较位函数结果和参数的内部表示取决于数据类型,且不可移植。 查看或比较BIT函数结果和参数时,使用实际整数值是一种与数据类型和平台无关的方法。

BITXOR函数可用于切换数值中的位。

BITANDNOT函数可用于清除位。

BITANDNOT (val, pattern )比BITAND (val, BITNOT(pattern)) 更有效率。

以下示例基于一个ITEM表,其中PROPERTIES列的类型为INTEGER。

返回所有第三属性位被置位的项。
SELECT ITEMID FROM ITEM
  WHERE BITAND(PROPERTIES, 4) = 4;
返回第四或第六属性位被置位的全部项目。
SELECT ITEMID FROM ITEM
  WHERE BITAND(PROPERTIES, 40) <> 0;
清除ID为3412的项目的第十二项属性。
UPDATE ITEM
  SET PROPERTIES = BITANDNOT(PROPERTIES, 2048)
  WHERE ITEMID = 3412;
设置ID为3412的项目的第五个属性。
UPDATE ITEM
  SET PROPERTIES = BITOR(PROPERTIES, 16)
  WHERE ITEMID = 3412;
切换ID为3412的项目的第11个属性。
UPDATE ITEM
  SET PROPERTIES = BITXOR(PROPERTIES, 1024)
  WHERE ITEMID = 3412;
将一个16位数值中只有第二位的位全部切换为开启。
SELECT  BITNOT(CAST(2 AS SMALLINT))
   FROM SYSIBM.SYSDUMMY1;
此示例返回 -3 (数据类型为 SMALLINT)。