Тип 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.

Типы данных: int в Python - comments

En
типы данных python int (python)