sql server中未签名的右移“>>>”运算符

sql server中未签名的右移“>>>”运算符,sql,sql-server,sql-server-2008,bitwise-operators,Sql,Sql Server,Sql Server 2008,Bitwise Operators,如何在sql server中编写未签名的右移运算符?表达式类似于值>>>0 下面是示例-5381>>>0=4294961915SQL Server不支持无符号整数,因此您的值不在INT范围内 您可以通过以下方式获得真正的二进制解释: SELECT CAST(-5381 AS VARBINARY) 如果您乐于在浮点运算的范围内工作,您可以: T-SQL没有位移位运算符,所以您必须自己实现一个。这里有一个按位移位的实现: 您必须将整数转换为varbinary,使用按位移位函数,然后转换回整数,希望

如何在sql server中编写未签名的右移运算符?表达式类似于值>>>0


下面是示例-5381>>>0=4294961915

SQL Server不支持无符号整数,因此您的值不在INT范围内

您可以通过以下方式获得真正的二进制解释:

SELECT CAST(-5381 AS VARBINARY)
如果您乐于在浮点运算的范围内工作,您可以:


T-SQL没有位移位运算符,所以您必须自己实现一个。这里有一个按位移位的实现:

您必须将整数转换为varbinary,使用按位移位函数,然后转换回整数,希望是这样!这是你期待的结果

实现和测试留给读者作为练习

编辑-为了澄清我在下面的评论中所说的内容,执行此SQL将演示各种类型转换所给出的不同结果:

SELECT -5381 AS Signed_Integer,
        cast(-5381 AS varbinary) AS Binary_Representation_of_Signed_Integer,
        cast(cast(-5381 AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Big_Integer, 
        cast(cast(-5381 AS varbinary) AS bigint) AS Signed_Integer_Transposed_onto_Big_Integer, 
        cast(cast(cast(-5381 AS varbinary) AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
结果:

Signed_Integer Binary_Representation_of_Signed_Integer                        Binary_Representation_of_Signed_Big_Integer                    Signed_Integer_Transposed_onto_Big_Integer Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
-------------- -------------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ------------------------------------------------------------------
-5381          0xFFFFEAFB                                                     0xFFFFFFFFFFFFEAFB                                             4294961915                                 0x00000000FFFFEAFB

你是说什么?当然,反过来说。嗨,帕特里克,上面的链接没有提供更多的信息。我正在寻找未签名的右移。论坛上的讨论只涉及按位左移位运算符。因此,您不想乘法而是想除法?下面是我在javascript中运行的示例。警报-5381>>>0;这个4294961915的输出,所以你只想转换成一个无符号整数?重读你的问题,我看到你实际上想做的是将一个有符号整数转换成一个无符号整数,你将移位0位。SQL Server没有无符号整数,但它有64位整数,并且将32位有符号整数转换为64位有符号整数的位模式将提供与所需的32位无符号整数相同的数值。试试这个:选择castcast-5381作为varbinary作为bigint注意,不能从int到bigint进行强制转换,因为这涉及到twos补码,如果数字为负数,则用1s填充高阶4字节;通过varbinary强制转换使其“忘记”符号位,而强制转换回bigint则假定高4阶字节中填充了0。请注意,4294961915之后的结果超出了有符号32位整数的界限,因此您必须使用64位整数!SQL Server不支持无符号整数-是的,它支持!!数据类型是0到255之间的无符号字节。但是没有一个更大的整数,所以如果您特别想要一个无符号的整数,这就不是很有用了。
Signed_Integer Binary_Representation_of_Signed_Integer                        Binary_Representation_of_Signed_Big_Integer                    Signed_Integer_Transposed_onto_Big_Integer Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
-------------- -------------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ------------------------------------------------------------------
-5381          0xFFFFEAFB                                                     0xFFFFFFFFFFFFEAFB                                             4294961915                                 0x00000000FFFFEAFB