sql server 2005 T-SQL ~(位非)(Transact-SQL)

对整数值执行逻辑位非运算。

主题链接图标 Transact-SQL 语法约定

~ expression

expression

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

注意:
在位运算中,只有一个 expression 可以为 binaryvarbinary 数据类型。

如果输入值为 int,则为 int

如果输入值为 smallint,则为 smallint

如果输入值为 tinyint,则为 tinyint

如果输入值为 bit,则为 bit

~ 位运算符对 expression 逐位执行逻辑位非运算。如果 expression 的值为 0,则结果集中的位将设置为 1;否则,结果中的位将清 0。换句话说,1 改成 0,而 0 则改成 1。

重要提示:
执行任何种类的位运算时,位运算中使用的表达式的存储长度都是很重要的。建议您在存储值时使用该相同的字节数。例如,如果将十进制值 5 作为 tinyintsmallintint 进行存储,所生成的值将以不同字节数进行存储:tinyint 使用 1 个字节存储数据;smallint 使用 2 个字节存储数据;而 int 则使用 4 个字节存储数据。因此,对 int 十进制值执行位运算所生成的结果与那些使用直接二进制或十六进制转换的结果不同,尤其是使用 ~(位非)运算符时。位非运算可能针对长度较短的变量执行。这种情况下,当长度较短的变量转换为较长的数据类型变量时,上 8 位中的位将不能设置为期望的值。我们建议先将较小的数据类型变量转换为较大的数据类型,然后对结果执行非运算。

以下示例创建一个使用 int 数据类型来存储值的表,并在一行中插入两个值。

USE tempdb;
GO
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'bitwise')
DROP TABLE bitwise;
GO
CREATE TABLE bitwise
(
a_int_value int NOT NULL,
b_int_value int NOT NULL
);
GO
INSERT bitwise VALUES (170, 75);
GO

以下查询对 a_int_valueb_int_value 列执行位非运算。

USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;

下面是结果集:

--- --- 
-171 -76

(1 row(s) affected)

170(a_int_valueA)的二进制表示形式是 0000 0000 1010 1010。对该值执行位非运算将生成二进制结果 1111 1111 0101 0101,该结果等于十进制 -171。75 的二进制表示形式是 0000 0000 0100 1011。执行位非运算将生成 1111 1111 1011 0100,该结果等于十进制 -76。

 (~A)   
0000 0000 1010 1010
-------------------
1111 1111 0101 0101
(~B)
0000 0000 0100 1011
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值