【发布时间】:2021-09-25 22:41:07
【问题描述】:
在SQL Server的网上书籍中,有一个解释bitwise not操作符的例子让我很困惑:
170(a_int_value 或 A)的二进制表示为 0000 0000 1010 1010。对该值执行按位 NOT 运算会产生二进制结果 1111 1111 0101 0101,即十进制 -171。
因为一个整数在 SQL Server 中是 4 个字节,它不应该是:
170: 0000 0000 0000 0000 0000 0000 1010 1010 (0x000000AA)
和
~170 = -171 : 1111 1111 1111 1111 1111 1111 0101 0101 (0xFFFFFF55)
例如,按位非运算符给出的结果是:1111 1111 0101 0101,即 0xFF55,如果我们将其转换为 int,则它完全是一个不同的整数:
Select cast(0xFF55 as int)
--> 65365
如果是 smallint,那么这个例子就是真的:
Select cast(0xFF55 as smallint)
--> -171
该示例是否遗漏了 1 的前 2 个字节,还是我误解了什么?
谢谢,
【问题讨论】:
-
你是对的。
INT使用 4 个字节。也许示例中有错字,它正在考虑使用SMALLINT(2 个字节)。 -
是的,你是对的。他们正在截断两个高阶字节,这是误导/不正确的。
-
拉取请求是filed。
-
@GSerg :谢谢,我在找这个,你有关于如何通知 MS 此类问题的任何文档吗?有人可以这样做吗?
-
@sporoy,任何拥有 github 帐户的人都可以编辑文档页面并提交拉取请求以供审查和批准。单击页面右上角的编辑链接。然后点击编辑图标,通过网页界面进行编辑。
标签: sql sql-server