SQL按位不(〜)

时间:2013-04-29 19:19:37

标签: sql bit-manipulation

有人可以解释原因吗

select ~1

给出结果

-2

也许我有很多东西需要了解数字类型的实际位数。你会推荐什么资源?

3 个答案:

答案 0 :(得分:6)

问:有人可以解释为什么选择〜1给出结果-2?

答:出于同样的原因〜0会给-1:)

这是一篇关于“二进制补码”算法的好文章:

大多数CPU架构都是两个补码(相对于一个补码)。来自同一篇文章:

  

两个补码是最容易在硬件中实现的,可能是   广受欢迎的最终原因[引证需要]。   早期大型机上的处理器通常由数千个处理器组成   晶体管 - 消除大量晶体管是一个   显着节省成本。早期集成的架构师   基于电路的CPU(Intel 8080等)选择使用两个补码   数学。随着IC技术的进步,几乎所有人都采用了两种技术   补充技术。英特尔,AMD和Power Architecture芯片是   所有两个补充。

答案 1 :(得分:4)

您应该阅读有关Two's Complement(http://en.wikipedia.org/wiki/Two's_complement

的内容 二进制中的

+1表示为00000001,其反函数为11111110,在二进制补码中为-2

答案 2 :(得分:3)

如果你想按位进行二进制(是/否);然后首先将数据转换为BIT,然后逐位应用。

SELECT ~CAST( 1 AS BIT)

给出结果

0

由于BIT只有三个值:0,1和NULL,它总是从0到1或1到0反转。 ~NULL总是以NULL结尾。