Другое

Как преобразовать целое число в двоичную строку в Python

Узнайте, как быстро преобразовать целые числа в двоичные строки в Python с помощью встроенных функций, форматирования и пользовательских методов. Сравнение производительности!

Как преобразовать целое число в строку, представляющую его в двоичном виде, в Python?
Пример: 37 → ‘100101’

Содержание

Использование функции bin()

Функция bin() является встроенным методом Python для преобразования целых чисел в их двоичную строковую репрезентацию. Это самый простой подход, который работает как для положительных, так и для отрицательных целых чисел.

Базовое использование:

python
number = 37
binary_string = bin(number)
print(binary_string)  # Вывод: '0b100101'

Согласно Mozilla Developer Network, функция bin() возвращает строку, представляющую двоичное значение заданного целого числа, с префиксом «0b», указывающим, что это двоичное число.

Ключевые характеристики:

  • Всегда возвращает строку
  • Включает префикс «0b»
  • Обрабатывает отрицательные числа, добавляя префикс «-0b»
  • Работает со всеми типами целых чисел в Python

Пример с разными числами:

python
positive_num = 14
negative_num = -14

print(bin(positive_num))   # Вывод: '0b1110'
print(bin(negative_num))   # Вывод: '-0b1110'

Методы форматирования строк

Python предоставляет несколько вариантов форматирования строк, которые позволяют преобразовать целые числа в двоичные строки без префикса «0b».

Функция format()

Функция format() является универсальным методом для преобразования целых чисел в двоичные строки. Согласно GeeksforGeeks, этот подход особенно полезен, когда вам нужны чистые двоичные строки без префиксов.

Базовое использование:

python
number = 37
binary_string = format(number, 'b')
print(binary_string)  # Вывод: '100101'

Расширенные варианты форматирования:

python
# Заполнение нулями до заданной длины
padded_binary = format(37, '08b')  # '00100101'

# Преобразование отрицательных чисел
negative_binary = format(-37, 'b')  # '-100101'

f‑строки (Python 3.6+)

f‑строки предоставляют современный, читаемый способ преобразования целых чисел в двоичные строки. Как объясняет Delft Stack, f‑строки с спецификатором формата :b предлагают лаконичный синтаксис.

Использование:

python
number = 37
binary_string = f"{number:b}"
print(binary_string)  # Вывод: '100101'

Расширенные примеры f‑строк:

python
# Заполнение нулями
padded_binary = f"{37:08b}"  # '00100101'

# Отрицательные числа
negative_binary = f"{-37:b}"  # '-100101'

Метод str.format()

Метод str.format() предоставляет еще один подход к преобразованию в двоичную строку, аналогичный f‑строкам, но с немного другим синтаксисом.

Использование:

python
number = 37
binary_string = "{:b}".format(number)
print(binary_string)  # Вывод: '100101'

Обработка отрицательных чисел

Python обрабатывает отрицательные числа по-другому при преобразовании в двоичную строку по сравнению с положительными. Согласно Stack Overflow, отрицательные числа представляются с минусом, за которым следует двоичное представление их абсолютного значения.

Поведение по умолчанию:

python
print(bin(-37))    # Вывод: '-0b100101'
print(format(-37, 'b'))  # Вывод: '-100101'
print(f"{-37:b}")        # Вывод: '-100101'

Двоичное представление в виде дополнения до двух:
Хотя стандартное представление Python использует минус, вы можете вручную реализовать представление в виде дополнения до двух:

python
def twos_complement(n, bits=8):
    if n >= 0:
        return format(n, f'0{bits}b')
    else:
        return format((1 << bits) + n, f'0{bits}b')

print(twos_complement(37, 8))    # Вывод: '00100101'
print(twos_complement(-37, 8))   # Вывод: '11011011'

Пользовательские методы преобразования

Для учебных целей или специфических требований можно реализовать собственные алгоритмы преобразования в двоичную строку без использования встроенных функций.

Метод ручного деления:

python
def int_to_binary(n):
    if n == 0:
        return '0'
    binary = ''
    abs_n = abs(n)
    while abs_n > 0:
        binary = str(abs_n % 2) + binary
        abs_n = abs_n // 2
    return '-' + binary if n < 0 else binary

print(int_to_binary(37))   # Вывод: '100101'
print(int_to_binary(-37))  # Вывод: '-100101'

Метод с побитовой манипуляцией:

python
def int_to_binary_bits(n, bits=32):
    if n >= 0:
        return format(n, f'0{bits}b')
    else:
        # Дополнение до двух
        return format((1 << bits) + n, f'0{bits}b')

print(int_to_binary_bits(37, 8))    # Вывод: '00100101'
print(int_to_binary_bits(-37, 8))   # Вывод: '11011011'

Практические примеры и лучшие практики

Распространенные случаи использования

Отображение в двоичном виде:

python
def display_binary(number, bits=8):
    """Отображает число в двоичном виде с паддингом"""
    return f"{number:0{bits}b}"

print(display_binary(37))      # '00100101'
print(display_binary(255, 16)) # '0000000011111111'

Операции с двоичными файлами:

python
def write_binary_to_file(filename, numbers):
    """Записывает числа как двоичные строки в файл"""
    with open(filename, 'w') as f:
        for num in numbers:
            f.write(f"{num:08b}\n")

# Пример использования
write_binary_to_file('data.bin', [37, 255, 1024])

Показатели производительности

Согласно PYnative, функция bin() обычно является самым быстрым методом для базового преобразования, в то время как f‑строки предлагают хорошую производительность с добавленной читаемостью.

python
import timeit

def test_bin():
    return bin(37)

def test_format():
    return format(37, 'b')

def test_fstring():
    return f"{37:b}"

print("bin():", timeit.timeit(test_bin, number=100000))
print("format():", timeit.timeit(test_format, number=100000))
print("f-string:", timeit.timeit(test_fstring, number=100000))

Сравнение методов преобразования

Метод Формат вывода Читаемость Производительность Версия Python
bin() С префиксом «0b» Хорошая Самая быстрая Все версии
format() Чистый двоичный Очень хорошая Быстрая Все версии
f‑строка Чистый двоичный Отличная Быстрая 3.6+
str.format() Чистый двоичный Хорошая Быстрая Все версии
Пользовательский Гибкий Переменная Переменная Все версии

Выбор подходящего метода:

  • Используйте bin(), когда нужен префикс «0b»
  • Используйте format() или f‑строки для чистых двоичных строк
  • Используйте f‑строки для лучшей читаемости в Python 3.6+
  • Используйте пользовательские методы для специальных требований, например, дополнения до двух

Согласно AskPython, выбор между методами часто зависит от того, нужен ли префикс, паддинг или конкретные требования к форматированию.


Источники

  1. Python bin() Function - W3Schools
  2. Integer to Binary String in Python - GeeksforGeeks
  3. Integer to Binary String in Python - AskPython
  4. Python: Working with the bin() Method - Reintech
  5. Python: Int to Binary - datagy
  6. How to Convert Int to Binary in Python - Delft Stack
  7. Python Convert Decimal Number to Binary - PYnative
  8. Convert int to binary string in Python - Stack Overflow
  9. Converting integer to binary in Python - Stack Overflow
  10. How to Convert an Integer to Binary String in Python - AppDividend

Заключение

Преобразование целых чисел в двоичные строки в Python простое благодаря нескольким встроенным методам. Функция bin() обеспечивает самый простой подход с префиксом «0b», в то время как format() и f‑строки предлагают более чистые двоичные представления. Для отрицательных чисел Python использует минус, но при необходимости можно вручную реализовать дополнение до двух. Выбирайте bin() для скорости и простоты, f‑строки для читаемости в современных версиях Python или пользовательские методы для специализированных операций с двоичными данными. Каждый метод имеет свои преимущества, поэтому выбирайте тот, который лучше всего соответствует вашим требованиям к формату вывода, производительности и читаемости кода.

Авторы
Проверено модерацией
Модерация