Создание
Целые числа в Python имеют неограниченную точность:
a = 42b = 10 ** 50c = int("123")d = int("ff", 16)e = int(3.99)f = int()print(b)print(e)int(3.99) отбрасывает дробную часть и даёт 3. Для строк можно указать основание от 2 до 36.
Литералы
print(1_000_000)print(0xFF)print(0o17)print(0b1010)Операции
| Операция | Описание |
|---|---|
a + b, a - b, a * b | Сложение, вычитание, умножение |
a / b | Истинное деление, результат float |
a // b | Деление с округлением вниз |
a % b | Остаток, знак совпадает со знаком делителя |
a ** b | Возведение в степень |
-a, +a | Унарные знаки |
abs(a) | Модуль |
divmod(a, b) | Пара (a // b, a % b) |
pow(a, b, m) | a ** b % m эффективно |
a & b, `a \ | b, a ^ b, ~a` |
a << n, a >> n | Сдвиги |
print(divmod(17, 5))print(divmod(-17, 5))print(pow(2, 100, 1000))print(7 // -2)print(7 % -2)Результат: (3, 2), (-4, 3), 376, -4, -1.
Методы и атрибуты
| Метод | Описание |
|---|---|
bit_length() | Число бит, необходимых для представления |
bit_count() | Число единичных бит (Python 3.10+) |
to_bytes(length, byteorder, signed=False) | Преобразование в байты |
from_bytes(bytes, byteorder, signed=False) | Классовый метод: байты в число |
as_integer_ratio() | Пара (числитель, 1) |
conjugate() | Само число |
is_integer() | Всегда True (Python 3.12+) |
real, imag, numerator, denominator | Атрибуты для совместимости с другими числовыми типами |
n = 255print(n.bit_length())print(n.bit_count())print(n.to_bytes(2, "big"))print(int.from_bytes(b"\x01\x00", "little"))print(int.from_bytes(b"\xff", "big", signed=True))Результат: 8, 8, b'\x00\xff', 1, -1.
Преобразование в строку
n = 255print(str(n))print(bin(n))print(oct(n))print(hex(n))print(f"{n:b}")print(f"{n:08b}")print(f"{n:x}")print(f"{n:X}")print(f"{n:,}")Кеширование малых чисел
CPython хранит единые объекты для чисел от -5 до 256, поэтому is для них может вернуть True. Не опирайтесь на это поведение: для сравнения чисел всегда используйте ==.
a = 256b = 256print(a is b)Ограничение длины строки
Начиная с Python 3.11 преобразование очень длинных чисел в строку и обратно ограничено 4300 цифрами для защиты от атак на производительность:
import syssys.set_int_max_str_digits(0)Значение 0 снимает ограничение.
Математика с целыми
import mathprint(math.gcd(12, 18))print(math.lcm(4, 6))print(math.factorial(10))print(math.isqrt(99))print(math.comb(5, 2))print(math.perm(5, 2))Результат: 6, 12, 3628800, 9, 10, 20.
Задания
- Преобразуйте число в двоичную строку без использования
binи f-строк. - Посчитайте сумму цифр числа
2 ** 1000. - Упакуйте три числа от 0 до 255 в 3 байта и распакуйте обратно.
