SQL按位非(~)

SQL按位非(~),sql,bit-manipulation,Sql,Bit Manipulation,有人能解释一下原因吗 select ~1 给出了结果 -2 0 关于数字类型的实际位,也许有很多东西需要我去学习。你会推荐什么资源 Q:有人能解释一下为什么选择~1会得到-2的结果吗 A:出于同样的原因~0会给出-1: 下面是一篇关于两个补码算法的好文章: 大多数CPU架构都是二者的补充,而不是一者的补充。同一条: 二的补充是最容易在硬件中实现的,这可能是 它广受欢迎的最终原因[需要引用]。 早期大型机上的处理器通常由数千个处理器组成 晶体管–消除大量晶体管是一个非常重要的问题 显著节约成

有人能解释一下原因吗

select ~1
给出了结果

-2
0

关于数字类型的实际位,也许有很多东西需要我去学习。你会推荐什么资源

Q:有人能解释一下为什么选择~1会得到-2的结果吗

A:出于同样的原因~0会给出-1:

下面是一篇关于两个补码算法的好文章:

大多数CPU架构都是二者的补充,而不是一者的补充。同一条:

二的补充是最容易在硬件中实现的,这可能是 它广受欢迎的最终原因[需要引用]。 早期大型机上的处理器通常由数千个处理器组成 晶体管–消除大量晶体管是一个非常重要的问题 显著节约成本。早期一体化建筑的建筑师 基于电路的CPU英特尔8080等选择了使用二者的互补 数学随着集成电路技术的进步,几乎所有的芯片都采用了两种技术 补充技术。英特尔、AMD和Power架构芯片 两者都是互补的


问:有人能解释一下为什么选择~1得到的结果是-2吗

A:出于同样的原因~0会给出-1:

下面是一篇关于两个补码算法的好文章:

大多数CPU架构都是二者的补充,而不是一者的补充。同一条:

二的补充是最容易在硬件中实现的,这可能是 它广受欢迎的最终原因[需要引用]。 早期大型机上的处理器通常由数千个处理器组成 晶体管–消除大量晶体管是一个非常重要的问题 显著节约成本。早期一体化建筑的建筑师 基于电路的CPU英特尔8080等选择了使用二者的互补 数学随着集成电路技术的进步,几乎所有的芯片都采用了两种技术 补充技术。英特尔、AMD和Power架构芯片 两者都是互补的


你应该读关于二的补语


+二进制中的1表示为00000001,其逆为11111110,在二的补码中为-2


+二进制中的1表示为00000001,其倒数为11111110,如果要按位执行二进制是/否操作,则在2的补码中为-2;然后首先将数据转换为位,然后按位应用not

SELECT ~CAST( 1 AS BIT)
给出了结果

-2
0
因为位只有三个值:0、1和NULL,所以它总是从0到1或从1到0反转。
~NULL将始终以NULL结尾。

如果要按位执行二进制是/否否;然后首先将数据转换为位,然后按位应用not

SELECT ~CAST( 1 AS BIT)
给出了结果

-2
0
因为位只有三个值:0、1和NULL,所以它总是从0到1或从1到0反转。
~NULL将始终以NULL结尾。

我尝试了sum~ISNULLdate,得到了一个非常大的数字。Aparently ISNULL返回一个整数类型,这听起来非常不必要,因为它只有两个返回值:1和0。您的施法可能会有所帮助,但听起来不必要的麻烦。~是按位NOT,而不是布尔NOT。令人惊讶的是,微软将两者分开,而它们本应是相同的。无论如何,按位NOT即~不应仅返回0和1。它返回与正在操作的数据类型相同的数据类型,但根据需要翻转值中的每一位。它在日期字段上工作是令人惊讶的,可能也没用,但这是MS为您准备的。我尝试了sum~ISNULLdate,得到了一个非常大的数字。Aparently ISNULL返回一个整数类型,这听起来非常不必要,因为它只有两个返回值:1和0。您的施法可能会有所帮助,但听起来不必要的麻烦。~是按位NOT,而不是布尔NOT。令人惊讶的是,微软将两者分开,而它们本应是相同的。无论如何,按位NOT即~不应仅返回0和1。它返回与正在操作的数据类型相同的数据类型,但根据需要翻转值中的每一位。这是令人惊讶的,可能是无用的,它的工作日期字段,但这是MS为您。