Hướng dẫn how do you convert integers from base 10 to base 2 in python? - làm cách nào để chuyển đổi số nguyên từ cơ số 10 sang cơ số 2 trong python?

Tôi đang làm việc trên một bộ chuyển đổi số trong Python và tôi cảm thấy khó khăn trong việc chuyển đổi chính xác các giá trị thập phân lớn [lớn hơn 2^53] từ thập phân sang nhị phân. Tôi đã thực hiện nhiều bài kiểm tra ngẫu nhiên để tìm điểm phá vỡ nhưng tôi không chắc tại sao nó lại bị phá vỡ. Tôi nghĩ Python 3 cho phép số lượng lớn tùy ý. Tôi có thể mất một số dữ liệu chuyển đổi giữa các giá trị STR và INT. Cảm ơn sự giúp đỡ của bạn. Đây là mã tôi đang sử dụng:

# @param: num is an integer >= 0 
# @return: A string containing the converted binary value of num 
def base10to2[num]:
    if[not bool[re.match[decimals, str[num]]]]:
        return "num must be a decimal number string [0-9]."
    if[int[num]  0:
        binaryValue = str[decimalRemainder % 2] + binaryValue
        decimalRemainder = math.floor[decimalRemainder / 2]    
    return binaryValue

Dưới đây là một số kết quả kiểm tra ngẫu nhiên của tôi:

Lỗi Bin Dec theo giá trị thập phân 57578088768095921 và giá trị nhị phân 110011001000111011110111011101111101111001101101100.

Lỗi Bin Dec theo giá trị thập phân 94158773465990610 và giá trị nhị phân 1010011101000010011100111110101001110110110100010110100.

Lỗi Bin Dec theo giá trị thập phân 27741136442133437 và giá trị nhị phân 11000101000111001101010100111010011001000101110111100.

Lỗi Bin Dec theo giá trị thập phân 102400897160966081 và giá trị nhị phân 10110101111001101000100101100101111110111101111110000.

Lỗi Bin Dec theo giá trị thập phân 61449679276206615 và giá trị nhị phân 11011010010100001010011001100000110110110110100100.

Lỗi Bin Dec theo giá trị thập phân 32630026885393859 và giá trị nhị phân 11100111110110011011000101001100000111110110111000100.

Lỗi Bin Dec theo giá trị thập phân 28823706477206651 và giá trị nhị phân 110011001100111000000100010000110101011110001111100.

Lỗi Bin Dec theo giá trị thập phân 32300284354028835 và giá trị nhị phân 11100101100000011101111111111110001001001110010100100100.

Lỗi Bin Dec theo giá trị thập phân 15026178163056103 và giá trị nhị phân 1101010110001000111010111011101111011001110111101001.

Dường như chỉ có 4 bit cuối cùng không chính xác trong những trường hợp này.

Dưới đây là quy trình chuyển đổi từ cơ sở 2 sang cơ sở 10 tôi có [chỉ trong trường hợp điều này có liên quan].

# @param: num is binary whole number
# @return: A string containing the converted decimal value of num
def base2to10[num]:
    if[not bool[re.match[binary, str[num]]]]:
        return "num must be a binary number string [0-1]."
    digits = []
    placeValue = 1
    decimalValue = 0
    digits = list[num]
    for i in range[len[digits]]:
        decimalValue += placeValue * int[digits[len[digits] - i - 1]]
        placeValue *= 2
    return decimalValue

unread,

Làm thế nào để bạn chuyển đổi một số từ cơ sở 10 sang cơ sở 2?8/20/12

đến

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:
as you can argue from the subject, i'm really,really new to python.
What is the best way to achieve that with python? Because the syntax int['30',2] doesn't seem to work!

> Từ chuỗi nhập khẩu itertools ...

unread,

Đối với n> 0, giả sử bạn chỉ muốn các chữ số được chuyển đổi chứ không phải một chuỗi. Chuyển đổi chuỗi và dấu trừ cho n8/20/12

đến

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:
the given base into an integer [which doesn't have a base, although
it's stored in base 2].

> Từ chuỗi nhập khẩu itertools ...

Đối với n> 0, giả sử bạn chỉ muốn các chữ số được chuyển đổi chứ không phải một chuỗi. Chuyển đổi chuỗi và dấu trừ cho n
'0b1100'

Def Convert [n, cơ sở]: a, b = divmod [n, cơ sở] nếu a> 0: cho e trong chuyển đổi [a, cơ sở]: năng suất e sản lượng b
have to do the conversion to integer first.

Miki Tebeka
'0b101'

Ngày 22 tháng 8 năm 2012, 2:23:00 AM8/22/12
>>> bin[int['5']]
'0b101'

> Bạn nhận được nhị phân bằng cách thực hiện bin [x], trong đó x là một số nguyên.

unread,

Lưu ý rằng Python cũng hỗ trợ các chữ số nhị phân [tiền tố với 0b]: trong [1]: 0b101 out [1]: 58/20/12

đến

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:
tried with the entire traceback. "Doesn't seem to work" doesn't tell us
a lot. Your OS and Python version is usually needed as well but we
might be able to skip those details in this case :] How much general
programming experience do you have?

> Từ chuỗi nhập khẩu itertools ...
Cheers.

Đối với n> 0, giả sử bạn chỉ muốn các chữ số được chuyển đổi chứ không phải một chuỗi. Chuyển đổi chuỗi và dấu trừ cho n

Def Convert [n, cơ sở]: a, b = divmod [n, cơ sở] nếu a> 0: cho e trong chuyển đổi [a, cơ sở]: năng suất e sản lượng b

unread,

Miki Tebeka8/20/12

đến

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:
>>> x
'11110'
>>> int[x, 2]
30
>>>

> Từ chuỗi nhập khẩu itertools ...

Đối với n> 0, giả sử bạn chỉ muốn các chữ số được chuyển đổi chứ không phải một chuỗi. Chuyển đổi chuỗi và dấu trừ cho n
Lipska the Kat�: Troll hunter, sandbox destroyer
and farscape dreamer of Aeryn Sun

unread,

Def Convert [n, cơ sở]: a, b = divmod [n, cơ sở] nếu a> 0: cho e trong chuyển đổi [a, cơ sở]: năng suất e sản lượng b8/20/12

đến

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:
@Mark Lawrence
Yes, you're definetely right: i should have posted my OS and the version but being a very rough question on syntax i thought it didn't really matter.
I've quite a good general programming experience. I know Java,Visual Basic.NET,Pascal and Mathematica.

> Từ chuỗi nhập khẩu itertools ...

unread,

Đối với n> 0, giả sử bạn chỉ muốn các chữ số được chuyển đổi chứ không phải một chuỗi. Chuyển đổi chuỗi và dấu trừ cho n8/21/12

> Bạn nhận được nhị phân bằng cách thực hiện bin [x], trong đó x là một số nguyên.

Lưu ý rằng Python cũng hỗ trợ các chữ số nhị phân [tiền tố với 0b]: trong [1]: 0b101 out [1]: 5

def denary2binary [n]: '' 'chuyển đổi số nguyên denary n thành chuỗi nhị phân bstr' '' bst n> 0: bstr = str [n % 2] + bstr n = n >> 1 return bstr
'''convert denary integer n to binary string bStr'''
bStr = ''
if n < 0: raise ValueError, "must be a positive integer"
if n == 0: return '0'
while n > 0:
bStr = str[n % 2] + bStr
n = n >> 1
return bStr

JM

[không phải chức năng của tôi nhưng tôi không thể nhớ mình đã đánh cắp ai]

Tin nhắn đã bị xóa

Joel Goldstick

unread,

Ngày 21 tháng 8 năm 2012, 3:57:59 AM8/21/128/21/12

Gửi Dennis Lee Bieber,

Vào Thứ Hai, ngày 20 tháng 8 năm 2012 lúc 1:29 chiều, Dennis Lee Bieber đã viết:> Vào Thứ Hai, ngày 20 tháng 8 năm 2012 :
wrote:
> On Mon, 20 Aug 2012 16:52:42 +0200, Jean-Michel Pichavant
> declaimed the following in
> gmane.comp.python.general:

Cảm ơn tất cả các bạn đã giúp đỡ lớn! @Mark Lawrence Có, bạn chắc chắn đúng: Tôi nên đăng hệ điều hành và phiên bản của mình nhưng là một câu hỏi rất thô về cú pháp Tôi nghĩ rằng nó không thực sự quan trọng. Tôi đã có một kinh nghiệm lập trình chung khá tốt. Tôi biết Java, Visual Basic.net, Pascal và Mathicala.
>> note that the builtin bin function is not available with python ver < 2.6
>>
>> def Denary2Binary[n]:
>> '''convert denary integer n to binary string bStr'''
>> bStr = ''
>> if n < 0: raise ValueError, "must be a positive integer"
>> if n == 0: return '0'
>> while n > 0:
>> bStr = str[n % 2] + bStr
>> n = n >> 1
>> return bStr
>>
>> JM
>>
>> [not my function but I can't remember who I stole from]
>

Jean-Michel Pichavant
> representation.
>
> H2B_Lookup = { "0" : "0000", "1" : "0001",
> "2" : "0010", "3" : "0011",
> "4" : "0100", "5" : "0101",
> "6" : "0110", "7" : "0111",
> "8" : "1000", "9" : "1001",
> "A" : "1010", "B" : "1011",
> "C" : "1100", "D" : "1101",
> "D" : "1110", "F" : "1111" }
>
> def I2B[i]:
> sgn = " "
> if i < 0:
> sgn = "-"
> i = -i
> h = ["%X" % i]
> return sgn + "".join[[H2B_Lookup[c] for c in h]]
>
>>>> from i2b import I2B
>>>> I2B[10]
> ' 1010'
>>>> I2B[1238]
> ' 010011100110'
>>>> I2B[-6]
> '-0110'
>>>>
> --
> Wulfraed Dennis Lee Bieber AF6VN
> //wlfraed.home.netcom.com/
>
> --
> //mail.python.org/mailman/listinfo/python-list

Điều này có thể được chuyển đi khỏi chủ đề, nhưng vì bạn đã mã hóa -6 AS -0110 Tôi nghĩ rằng tôi sẽ tham gia vào 'Bổ sung hai'
thought I'd chime in on 'two's complement'

Với số nhị phân, bạn có thể biểu diễn 0 đến 255 trong một byte hoặc bạn có thể biểu diễn các số từ 127 đến -128. Để có được tiêu cực, bạn bổ sung cho mỗi bit [0 đến 1, 1s đến 0s], sau đó thêm một bit vào kết quả. Vì vậy: 3 -> 00000011 ~ 3 -> 111111100 Thêm 1 1 kết quả 111111101
represent numbers from 127 to -128. To get the negative you
complement each bit [0s to 1s, 1s to 0s], then add one to the result.
So:
3 --> 00000011
~3 -> 111111100
add 1 1
result 111111101

Điều tốt đẹp về đại diện này là số học hoạt động tốt với hỗn hợp các số âm và dương.
fine with a mixture of negative and positive numbers.

Ví dụ: 8 + [-3] ----> 00001000 111111101 Giving: 00000101 là 5!
111111101
gives: 00000101
which is 5!

- Joel Goldstick
Joel Goldstick

Ian Kelly

unread,

Ngày 21 tháng 8 năm 2012, 4:00:21 AM8/21/128/21/12

đến Python

Tôi sẽ ném một .lstrip ['0'] vào đó để loại bỏ các số 0 hàng đầu xấu xí [và cũng thêm một trường hợp đặc biệt cho i == 0].
zeroes [and also add a special case for i == 0].

Mọi người nên biết thuật toán chung, mặc dù:

từ chuỗi nhập khẩu itertools

Def Convert [n, cơ sở]: chữ số = [chr [x] cho x trong chuỗi [phạm vi [ord ['0'], ord ['9']+1], phạm vi [ord ['a'], ord 'Z']+1]]] nếu không 2
digits = [chr[x] for x in chain[range[ord['0'], ord['9']+1],
range[ord['A'], ord['Z']+1]]]
if not 2 This may be moving off topic, but since you encode -6 as -0110 I
> thought I'd chime in on 'two's complement'
>
> with binary number, you can represent 0 to 255 in a byte, or you can
> represent numbers from 127 to -128. To get the negative you
> complement each bit [0s to 1s, 1s to 0s], then add one to the result.
> So:
> 3 --> 00000011
> ~3 -> 111111100
> add 1 1
> result 111111101
>
> The nice thing about this representation is that arithmetic works just
> fine with a mixture of negative and positive numbers.
>
> eg 8 + [-3] ----> 00001000
> 111111101
> gives: 00000101
> which is 5!

Mọi người nên biết thuật toán chung, mặc dù:
negative sign of the number as a bit in a format of fixed width, e.g.
within a byte or word. In a string representation, unless you are
specifically trying to represent computer memory, it is usually better
to just use a minus sign, to be more consistent with how we usually
represent numerals.

từ chuỗi nhập khẩu itertools
binary. For example, with decimal numbers we could use "ten's
complement": individually subtract each digit from 9, and add 1 to the
result. A leading digit between 5 and 9 would be considered negative.

Def Convert [n, cơ sở]: chữ số = [chr [x] cho x trong chuỗi [phạm vi [ord ['0'], ord ['9']+1], phạm vi [ord ['a'], ord 'Z']+1]]] nếu không 2
-[042] --> 958
-[958] --> 042

Ngày 21 tháng 8 năm 2012, 4:10:18 AM8/21/12

Trên Mon, ngày 20 tháng 8 năm 2012 lúc 11:57 sáng, Joel Goldstick đã viết:> Điều này có thể bị tắt khỏi chủ đề, nhưng vì bạn đã mã hóa -6 AS -0110 I> nghĩ rằng tôi sẽ tham gia vào 'hai bổ sung'>> với Số nhị phân, bạn có thể biểu thị 0 đến 255 trong một byte hoặc bạn có thể> đại diện cho các số từ 127 đến -128. Để có được âm bạn> bổ sung cho mỗi bit [0 đến 1, 1s đến 0s], sau đó thêm một bit vào kết quả. > Vì vậy:> 3 -> 00000011> ~ 3 -> 111111100> Thêm 1 1> Kết quả 111111101 >> Điều tốt đẹp về biểu diễn này là số học hoạt động chỉ> tốt với hỗn hợp các số âm và dương. >> Vd 8 + [-3] ----> 00001000> 111111101> Đưa ra: 00000101> đó là 5!
Ian

Lý do chính để sử dụng bổ sung của Two là khi bạn cần mã hóa dấu hiệu âm của số dưới dạng một chút ở định dạng có chiều rộng cố định, ví dụ: trong một byte hoặc từ. Trong một biểu diễn chuỗi, trừ khi bạn đang cố gắng đại diện cho bộ nhớ máy tính, thường chỉ cần sử dụng dấu trừ, để phù hợp hơn với cách chúng ta thường biểu diễn các chữ số.

unread,

Mặt khác, lưu ý rằng các biểu diễn bổ sung không cụ thể cho nhị phân. Ví dụ: với các số thập phân, chúng tôi có thể sử dụng "Bổ sung TEN": riêng lẻ trừ mỗi chữ số từ 9 và thêm 1 vào kết quả. Một chữ số hàng đầu từ 5 đến 9 sẽ được coi là tiêu cực.8/21/12

Vì vậy, ví dụ: -[042] -> 958 -[958] -> 042

958 + 042 == 000
> Everybody should know the generic algorithm, though:

Chúc mừng, Ian

Paul Rubin
String conversion and minus sign for n 0:
for e in convert[a,base]:
yield e
yield b

đến

unread,

Ian Kelly viết:> Mọi người nên biết thuật toán chung, mặc dù:8/22/12

Vì vậy, ví dụ: -[042] -> 958 -[958] -> 042

958 + 042 == 000

Lưu ý rằng Python cũng hỗ trợ các chữ số nhị phân [tiền tố với 0b]: trong [1]: 0b101 out [1]: 5
In [1]: 0b101
Out[1]: 5

Miki Tebeka

unread,

Ngày 22 tháng 8 năm 2012, 2:23:00 AM8/22/128/22/12

đến ,

> Bạn nhận được nhị phân bằng cách thực hiện bin [x], trong đó x là một số nguyên.

Làm thế nào để bạn chuyển đổi một số từ cơ sở 10 sang cơ sở 2?

Các bước để chuyển đổi từ cơ sở 10 sang cơ sở 2- Chia số đã cho [trong cơ sở 10] với 2 cho đến khi kết quả cuối cùng còn lại nhỏ hơn 2. Đi qua phần còn lại từ dưới lên trên để có được số yêu cầu trong cơ sở 2.Divide the given number [in base 10] with 2 until the result finally left is less than 2. Traverse the remainders from bottom to top to get the required number in base 2.

Làm thế nào để bạn chuyển đổi sang Base 2 trong Python?

Trong Python, bạn chỉ có thể sử dụng hàm bin [] để chuyển đổi từ giá trị thập phân sang giá trị nhị phân tương ứng của nó. Và tương tự, hàm int [] để chuyển đổi một nhị phân thành giá trị thập phân của nó. Hàm int [] lấy đối số thứ hai là cơ sở của số sẽ được chuyển đổi, đó là 2 trong trường hợp số nhị phân.use the bin[] function to convert from a decimal value to its corresponding binary value. And similarly, the int[] function to convert a binary to its decimal value. The int[] function takes as second argument the base of the number to be converted, which is 2 in case of binary numbers.

Làm thế nào để bạn chuyển đổi một số cơ sở 10 thành cơ sở khác trong Python?

Có một cách để chuyển đổi sang các cơ sở khác nhau bằng cách chia số cơ sở 10 cho cơ sở và lấy phần còn lại và lặp lại cho đến khi nó không chia hết và viết thương số theo sau là tất cả các phần còn lại.[Vd.dividing the base 10 number by the base and taking the remainder and repeating until it is not divisible and write the quotient followed by all the remainders. [EX. 50/6 = 8 R 2, 8/6 = 1 R2 so 50 in base 6 would be 122].

Làm cách nào để chuyển đổi một số từ cơ sở này sang cơ sở khác trong Python?

Cách dễ nhất [có lẽ] là chuyển đổi bất kỳ số nào từ cơ sở B1 sang B2 là chuyển đổi B1 → thập phân → B2.Vì vậy, để chuyển đổi từ bất kỳ cơ sở nào sang số thập phân, hãy tìm tổng của tất cả [chữ số*[cơ sở^nguồn]] [trong đó công suất là 0 thành [numofdigits-1]] theo thứ tự ngược của các chữ số.convert b1→Decimal→b2. So, to convert from any base to Decimal, find the sum of all [digit*[base^power]] [where power is 0 to [NumOfDigits-1]] in the reverse order of the digits.

Bài Viết Liên Quan

Chủ Đề