Decimal to binary conversion for large numbers in Excel

后端 未结 12 2084
长情又很酷
长情又很酷 2020-12-14 02:31

I have some large numbers in an Excel sheet and I want to convert them to binary.

e.g.

12345678  
965321458  
-12457896
相关标签:
12条回答
  • 2020-12-14 03:00

    Perhaps a simpler option:

    For positive numbers only, just use BASE (as in BASE2) for numbers between 0 to 2^53 in Excel. Here are some examples:

    =BASE(3,2)  # returns 11
    
    =BASE(11,2)  # returns 1011
    

    Credit for answer goes here: https://ask.libreoffice.org/en/question/69797/why-is-dec2bin-limited-to-82bits-in-an-32-and-64-bits-world/

    Negative numbers: Come to think of it, negative numbers could be handled as well by building upon howy61's answer. He shifts everything by a power of two (2^31 in his case) to use the 2's complement:

    =BASE(2^31+MyNum, 2)
    

    so (using 2^8 for only 8 bits):

    =BASE(2^8+(-1),2)  # returns 11111111 
    
    =BASE(2^8+(-3),2)  # returns 11111101
    

    The numbers given by the OP requires more bits, so I'll use 2^31 (could go up to 2^53):

    =BASE(2^31+(-12457896),2)  # returns 11111111010000011110100001011000
    

    For either positive or negative, both formulas could be coupled in a single IF formula. Here are two ways you could do it that give the same answer, where MyNum is the decimal number you start with:

    =IF(MyNum<0, BASE(2^31+MyNum,2), BASE(MyNum, 2))
    

    or

    =BASE(IF(MyNum<0, MyNum+2^32, MyNum), 2)
    
    0 讨论(0)
  • 2020-12-14 03:01
    =IF(Decimal>-1,BASE(Decimal,2,32),BASE(2^32+(Decimal),2))
    

    Does both positive and negative numbers. Took a bit LOL. Tech pun. You're welcome.

    0 讨论(0)
  • 2020-12-14 03:02

    If we are talking positive number between 0 and 2^32-1 you can use this formula:

    =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)
    

    NOTE: =DEC2BIN() function cannot handle numbers larger than 511 so as you see my formula breaks your number into four 8-bit chunks, converts them to binary format and then concatenates the results.

    Well, theoretically you can extend this formula up to six 8-bit chunks. Maximum precision you can get in Excel is 15 (fifteen) decimal digits. When exceeded, only the most significant 15 digits remain, the rest is rounded. I.e. if you type 12345678901234567 Excel will store it as 12345678901234500. So since 2^48-1 is 15 decimal digits long the number won't get rounded.

    0 讨论(0)
  • 2020-12-14 03:04

    This vba function solves the problem of binary conversion of numbers greater than 511 that can not be done with WorksheetFunction.dec2bin.
    The code takes advantage of the WorksheetFunction.dec2bin function by applying it in pieces.

    Function decimal2binary(ByVal decimal2convert As Long) As String
    Dim rest As Long
    If decimal2convert = 0 Then
       decimal2binary = "0"
       Exit Function
    End If
    Do While decimal2convert > 0
       rest = decimal2convert Mod 512
       decimal2binary = Right("000000000" + WorksheetFunction.Dec2Bin(rest), 9) + decimal2binary
       decimal2convert = (decimal2convert - rest) / 512
    Loop
    decimal2binary = Abs(decimal2binary)
    End Function
    
    0 讨论(0)
  • 2020-12-14 03:06

    To add easier to read formatting to Taosique's great answer, you can also break it up into chunks of 4 bits with spaces in between, although the formula grows to be a monster:

    =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
    

    Of course, you can just use the right half of it, if you're just interested in 16 bit numbers:

    =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
    
    0 讨论(0)
  • 2020-12-14 03:07

    Someone can find binary shift operations more clear and relevant here

    =DEC2BIN(BITRSHIFT($A$1,24),8) & DEC2BIN(MOD(BITRSHIFT($A$1,16),256),8) & DEC2BIN(MOD(BITRSHIFT($A$1,8),256),8) & DEC2BIN(MOD($A$1,256),8)
    

    This formula is for 32-bit values

    0 讨论(0)
提交回复
热议问题