Тип int в языке Python: простые целые числа и их возможности
Тип int в Python
Тип int предназначен для хранения целых чисел. Целое число записывается цифрами, включая знак минус для отрицательных значений. Переменная получает объект int, для проверки используется type().
Основной способ: прямое присваивание целого числа
Для создания int достаточно записать число в коде. Python автоматически определяет тип.
a = 7
b = -12
c = 0
print(a, b, c)
print(type(a))типы данных python int (типы данных: int в python)
7 -12 0 <class 'int'>
Целые числа поддерживают арифметические операции: +, -, *, //, %, **.
x = 17
y = 5
print(x + y)
print(x - y)
print(x * y)
print(x // y)
print(x % y)
print(x ** y)
22 12 85 3 2 1419857
Как записать число в двоичной, восьмеричной или шестнадцатеричной системе?
Для записи используются префиксы 0b, 0o, 0x. Подчеркивание применяется для разделения разрядов.
binary = 0b1010
octal = 0o17
hexadecimal = 0x1F
with_spaces = 1_000_000
print(binary, octal, hexadecimal, with_spaces)
10 15 31 1000000
Цель записи в другом основании: наглядное представление битовых флагов, байтов и адресов памяти.
Как преобразовать строку в целое число?
Функция int() принимает строку и необязательное основание системы счисления.
number = int('123')
binary_number = int('101', 2)
hex_number = int('FF', 16)
print(number)
print(binary_number)
print(hex_number)
123 5 255
Строка перед преобразованием может содержать пробелы, но не другие символы.
ValueError возникает при лишних символах, недопустимых цифрах и пустой строке. Перед вызовом int() строку очищают методом strip().
Как получить целую часть от деления?
Оператор // выполняет деление вниз. Функция divmod() возвращает частное и остаток.
a = 20
b = 3
quotient = a // b
remainder = a % b
div_result = divmod(a, b)
print(quotient, remainder, div_result)
6 2 (6, 2)
Для отрицательных чисел деление округляется вниз, поэтому результат не совпадает с простым отбрасыванием дробной части.
Как преобразовать вещественное число в целое?
int() усекает дробную часть до нуля. Для математического округления применяется round().
a = int(3.99)
b = int(-3.99)
c = round(3.99)
print(a, b, c)
3 -3 4
Как проверить количество битов и единиц в двоичной записи?
Метод bit_length() возвращает длину числа в битах, bit_count() подсчитывает единицы.
n = 255
print(n.bit_length())
print(n.bit_count())
print((n << 1).bit_length())
8 8 9
Как выполнить побитовые операции?
Операции &, |, ^, ~, <<, >> применяются к двоичному представлению int.
a = 12
b = 10
print(a & b)
print(a | b)
print(a ^ b)
print(~a)
print(a << 2)
print(a >> 1)
8 14 6 -13 48 6
Операция ~a возвращает -(a+1). Для отрицательных чисел побитовые результаты могут быть неочевидными из-за дополнительного кода.
Как преобразовать int в байты и обратно?
Метод to_bytes() создает байтовую последовательность, from_bytes() собирает число из байтов.
number = 1024
bytes_data = number.to_bytes(2, byteorder='big')
print(bytes_data)
print(int.from_bytes(bytes_data, byteorder='big'))
b'\x04\x00' 1024
OverflowError появляется, когда число не помещается в выбранный размер. Для знакового представления используется параметр signed=True.
Как работать с числами произвольной точности?
Тип int не ограничен фиксированным числом разрядов. Длина числа ограничена только памятью.
big = 2 ** 200
print(big)
1606938044258990275541962092341162602522202993782792835301376
Это удобно для математических расчетов, шифрования и задач, где нужна высокая точность.
Какая разница между обычным и целочисленным делением?
Оператор / всегда возвращает float. Оператор // возвращает int, если оба операнда int.
a = 10
b = 2
print(a / b)
print(a // b)
5.0 5
Деление на ноль вызывает ZeroDivisionError. Перед делением стоит проверять значение делителя.
Расширенные примеры с типом int
В этом разделе собраны дополнительные примеры, раскрывающие преобразования, побитовые операции и особенности int.
Создание int из разных типов
Конструктор int() работает с числами, строками, логическими значениями и объектами.
from decimal import Decimal
print(int())
print(int(True))
print(int(False))
print(int(' 42 '))
print(int('1_0'))
print(int(Decimal('7.8')))
print(int(3.999))
0 1 0 42 10 7 3
Пустой вызов создает ноль. Логические значения являются подклассом int, поэтому они преобразуются в 1 и 0. Строка может содержать пробелы по краям.
Преобразование строк с другим основанием
print(int('101', 2))
print(int('777', 8))
print(int('ff', 16))
print(int('z', 36))
print(int('100', base=3))
5 511 255 35 9
Основание задается от 2 до 36. Буквы a-z соответствуют значениям 10-35.
Особенности деления отрицательных чисел
a = -7
b = 3
print(a // b)
print(a % b)
print(divmod(a, b))
-3 2 (-3, 2)
Деление // округляет вниз, поэтому частное для -7 и 3 равно -3. Остаток положительный.
Проверка степени двойки и четности
n = 16
is_power_of_two = (n > 0) and (n & (n - 1) == 0)
print(is_power_of_two)
odd = 7
print(odd & 1)
print(odd | 1)
print(odd ^ 1)
True 1 7 6
Выражение n & (n - 1) обнуляет младшую установленную единицу. Для положительной степени двойки результат нулевой. odd & 1 показывает младший бит.
Сдвиги и умножение на степени двойки
x = 3
print(x << 4)
print(x >> 1)
48 1
Сдвиг влево на четыре позиции умножает число на 16. Сдвиг вправо на одну позицию делит число на 2 с округлением вниз.
Двоичное, восьмеричное и шестнадцатеричное представление
value = 255
print(bin(value))
print(oct(value))
print(hex(value))
print(value.bit_length())
print(value.bit_count())
0b11111111 0o377 0xff 8 8
Встроенные функции bin, oct, hex возвращают строки. Методы bit_length и bit_count работают с двоичным представлением числа.
Форматирование int в f-строках
number = 255
print(f'{number:b}')
print(f'{number:o}')
print(f'{number:x}')
print(f'{number:#X}')
11111111 377 ff 0XFF
Код формата b, o, x задает систему счисления. Символ # перед форматом включает префикс.
Преобразование в байты с порядком байтов
num = 258
b = num.to_bytes(2, byteorder='big')
print(b)
print(int.from_bytes(b, byteorder='big'))
signed = (-1).to_bytes(2, byteorder='little', signed=True)
print(signed)
print(int.from_bytes(signed, byteorder='little', signed=True))
b'\x01\x02' 258 b'\xff\xff' -1
Byteorder 'big' означает старший байт в начале, 'little' младший байт в начале. Для отрицательных чисел указывается signed=True.
Числитель и знаменатель целого числа
five = 5
print(five.numerator)
print(five.denominator)
print(five.as_integer_ratio())
5 1 (5, 1)
Целое число можно представить как дробь со знаменателем 1. Метод as_integer_ratio() возвращает пару для этого представления.
Особенности сравнения объектов int
a = 257
b = 257
print(a is b)
c = 5
d = 5
print(c is d)
False True
Интерпретатор может кэшировать малые целые числа от -5 до 256. Для значений вне диапазона оператор is может дать False. Для сравнения значений применяется ==.
Коды символов и обратное преобразование
code = ord('А')
print(code)
print(chr(1040))
print(chr(65) == 'A')
1040 А True
ord() превращает один символ в его целочисленный код Unicode, chr() превращает код в символ.
Факториал 50 и произвольная точность
factorial = 1
for i in range(1, 51):
factorial *= i
print(factorial)
30414093201713378043612608166064768844377641568960512000000000000
Результат 50! содержит 65 цифр и не вызывает переполнения. Python автоматически увеличивает память под число.
Ограничением произвольной точности становится доступная память. При работе с очень большими числами может появиться MemoryError.