Excel中大数的十进制到二进制转换

我在Excel表中有一些大数字,我想将它们转换为二进制例如12345678 965321458 -12457896有人可以帮助我如何做到这一点。 谢谢。

如果我们正在说02^32-1之间的正数,你可以使用这个公式:

 =DEC2BIN(MOD(QUOTIENT($A$1,256^3),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^2),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^1),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^0),256),8) 

注意: =DEC2BIN()函数不能处理大于511的数字,因为您看到我的公式将您的数字分成四个8位块,将它们转换为二进制格式,然后连接结果。

那么理论上你可以把这个公式扩展到6个8位块。 您可以在Excel中获得的最大精度是十五(十五)十进制数字。 当超过时,只剩下最重要的15位数字,其余的四舍五入。 也就是说,如果input12345678901234567 Excel会将其存储为12345678901234500 。 所以由于2^48-1是15位十进制数字,所以这个数字不会被四舍五入。

见VBA张贴在这里

 ' The DecimalIn argument is limited to 79228162514264337593543950245 ' (approximately 96-bits) - large numerical values must be entered ' as a String value to prevent conversion to scientific notation. Then ' optional NumberOfBits allows you to zero-fill the front of smaller ' values in order to return values up to a desired bit level. Function DecToBin(ByVal DecimalIn As Variant, Optional NumberOfBits As Variant) As String DecToBin = "" DecimalIn = CDec(DecimalIn) Do While DecimalIn <> 0 DecToBin = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & DecToBin DecimalIn = Int(DecimalIn / 2) Loop If Not IsMissing(NumberOfBits) Then If Len(DecToBin) > NumberOfBits Then DecToBin = "Error - Number too large for bit size" Else DecToBin = Right$(String$(NumberOfBits, "0") & _ DecToBin, NumberOfBits) End If End If End Function 

我只是尝试了上面的公式,发现Microsoft以另一种方式搞乱了DEC2BIN函数,使公式无法正确使用负数。 在内部,DEC2BIN使用十位结果; 除非使用可选的长度参数,否则前导零将从文本结果中删除,在这种情况下,所需的前导零数保留在string中。 但是这里有一个问题:一个负数总是从一个开始,所以没有前导零,所以DEC2BIN将总是显示所有的十位! 因此,应该显示11111111(八个)的DEC2BIN(-1,8)将显示1111111111(十个)。

为了解决这个问题,使用RIGHT将每个八位块修剪为八位,这听起来很愚蠢。

 =RIGHT(DEC2BIN(QUOTIENT(A1,256^3),8),8) & RIGHT(... 

(我通过VBA阅读,并没有相同的问题,但它看起来不会处理负面的。)

为了给Taosique的答案增加更多的阅读格式,你也可以把它分成4个大块,里面有空格,尽pipe公式会变成一个怪物:

 =DEC2BIN(MOD(QUOTIENT($A$1,16^7),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^6),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^5),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^4),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^3),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^2),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^1),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^0),16),4) 1101 0100 1111 0110 0011 0001 0000 0001 

当然,如果你只是对16位数字感兴趣,你可以使用它的右半部分:

 =DEC2BIN(MOD(QUOTIENT($A$1,16^3),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^2),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^1),16),4)&" "&DEC2BIN(MOD(QUOTIENT($A$1,16^0),16),4) 0011 0001 0000 0001 

这是另一种方式。 这不是一个单一的公式,但我已经尝试和转换为2,099,999,999,999。 我的第一个意图是build立一个51位的计数器,但不知何故,它不适用于我提到的数字之外的数字。 从http://www.excelexperto.com/content/macros-production/contador-binario-de-51-bits/下&#x8F7D;

我希望这是有用的。 问候。

虽然我没有写这个消极或小数,它应该是相对容易修改。 这个VBA将转换任何超大(或不是那么大,如果你想,但不是重点)十进制转换二进制结果包含最多32767位数字(VBA中的最大string长度)。

在单元格“A1”中input十进制作为string,结果将以“B1”作为string。

 Dim NBN As String Dim Bin As String 5 Big = Range("A1") AA = Len(Big) For XX = 1 To AA L1 = Mid(Big, XX, 1) + CRY CRY = 0 If L1 = 0 Then FN = "0" GoTo 10 End If If Int(L1 / 2) = L1 / 2 Then FN = L1 / 2 GoTo 10 End If If Int(L1 / 2) <> L1 / 2 Then FN = Int(L1 / 2) CRY = 10 GoTo 10 End If 10 NBN = NBN & FN Next XX If Left(NBN, 1) = "0" Then NBN = Right(NBN, (Len(NBN) - 1)) End If If CRY = 10 Then Bin = "1" & Bin Else Bin = "0" & Bin Range("A1") = NBN Range("A2") = Bin If Len(NBN) > 0 Then NBN = "" CRY = 0 GoTo 5 End If 

有一个简单的解决scheme。 我有几个42亿个单元格,实际上是一个负二的补码,这个工程得到正确的值:= SUM(2 ^ 31-(A1-2 ^ 31))