有人可以解释为什么
select ~1
给出结果
-2
也许我有很多东西要了解数字类型的实际位。你会推荐什么资源?
问:有人能解释一下为什么 select ~1 给出的结果是 -2 吗?
答:出于同样的原因 ~0 会给出 -1 :)
这是一篇关于“二进制补码”算术的好文章:
大多数 CPU 架构都是二进制补码(相对于一个补码)。来自同一篇文章:
二进制补码是最容易在硬件中实现的,这可能是其广泛流行的最终原因[需要引用]。早期大型机上的处理器通常由数千个晶体管组成——消除大量晶体管可以显着节省成本。早期基于集成电路的 CPU(Intel 8080 等)的架构师选择使用二进制补码数学。随着IC技术的进步,几乎都采用了二进制补码技术。英特尔、AMD 和 Power Architecture 芯片都是互补的。
如果你想按位不做二进制(是/否);然后首先将数据转换为 BIT,然后按位应用。
SELECT ~CAST( 1 AS BIT)
给出结果
0
由于 BIT 只有三个值:0、1 和 NULL,它总是会从 0 反转到 1 或 1 到 0。~NULL 将始终以 NULL 结束。
您应该阅读有关 Two's Complement ( http://en.wikipedia.org/wiki/Two's_complement )的信息
二进制中的 +1 表示为00000001
,其逆是11111110
,即二进制补码中的 -2