0

我试图找到信息和方法。但它没有包含任何有用的信息。

使用 T-SQL,我想将负十进制转换为二进制并将其转换回来。

样本值:-9223372036854775543

我尝试使用Calculator将此值转换为Bin 结果是... 1000000000000000000000000000000000000000000000000000000100001001

并转换回十二月。没关系。

我如何使用 T-SQL(SQL2008) 脚本/函数进行这样的转换?找了好久的资料。哪位知道这方面的,请帮忙。

4

1 回答 1

1

没有内置功能。对于 INT 和 BIGINT,您可以使用CONVERT(VARCHAR(100),CAST(3 AS VARBINARY(100)),2)将十六进制表示形式作为字符串。然后您可以进行简单的搜索替换,因为每个十六进制数字正好代表 4 个二进制数字。但是,对于 BIGINT 范围之外的值,没有关于它们如何在内部表示的标准。您可能会得到正确的结果,也可能不会,这种行为甚至可能在版本之间发生变化。

关于如何表示负数也没有标准。大多数整数实现都使用二进制补码表示。在该表示中,最高位表示数字的符号。您有多少位是约定俗成的,完全取决于您的环境。

在数学中,-3 将是二进制的 -11,而不是 11111101。

要解决您的问题,您可以使用 CLR 函数,也可以通过老式方式查看您的号码:

Is it odd? -> output a 1
Is it even? -> output a 0
integer divide by 2
repeat until the value is 0

这将以相反的顺序为您提供数字,因此您必须翻转结果。要获得负数 n 的二进制补码表示,计算 1-n,使用上述算法将结果转换为二进制,但数字反转(0 代替 1,反之亦然)。将数字翻转到正确的顺序后,前面加上足够的 1 来填充您的“框”。

于 2013-05-28T14:16:31.177 回答