没有内置功能。对于 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 来填充您的“框”。