Обычные целые числа в Python имеют тип int
и записываются как строки, состоящие из десятичных цифр. Целые числа типа int
(положительные и отрицательные) имеют неограниченную точность, могут принимать сколь угодно большие значения. Тип int
являются неизменяемым объектом, выполняя операцию над целыми числами, вы получаете новый числовой объект.
Целые числа поддерживают следующие операции:
Тип int
в языке Python представлен классом int()
, он позволяет:
int
с учетом указанного основания системы счисления (десятичные по основанию 10, шестнадцатеричные по основанию 16, восьмеричные по основанию 8 и двоичные по основанию 2).float
в тип int
(отбрасывает дробную часть).int
Класс int()
не сможет преобразовать к типу int
:
complex
, т.к. нет однозначного способа преобразования данного типа чисел.int
:# Преобразование строки с записью # целого числа в десятичной форме к типу int >>> int(' -3 ', base=10) # 3 # При преобразовании десятичных литералов, # записанных в строки, основание можно опускать >>> int(' +5 ') # 5 >>> int(' -15_125') # -15125 # Преобразование типа float в тип `int` >>> int(3.23) # 3 >>> int(1.) # 1 >>> int(3.14e-10) # 0 # Восьмеричные литералы и строки с ними - в тип int >>> int(0o177) # 127 >>> int(' 0o177 ', base=8) # 127 # Шестнадцатеричные литералы и строки с ними - в тип int >>> int(0x9ff) # 2559 >>> int(' 0x9ff ', base=16) # 2559 # Двоичные литералы и строки с ними - в тип int >>> int(0b101010) # 42 >>> int('0b101010', base=2) # 42
Начиная с Python 3.6, чтобы облегчить визуальную оценку величины числа, между цифрами и после любого спецификатора системы счисления разрешается вставлять одиночные символы подчеркивания.
>>> 100_000, 0x_FF_FF, 0o7_777 # (100000, 65535, 4095)
Целые числа еще могут записываться как, шестнадцатеричные (по основанию 16), восьмеричные (по основанию 8) и двоичные (по основанию 2).
Все эти литералы создают объекты целых чисел, они являются всего лишь альтернативными формами записи значений. Для преобразования целого числа в строку с представлением в любой из трех систем счисления можно использовать встроенные функции hex()
, oct()
и bin()
int
:int.bit_length()
:Возвращает количество битов, необходимых для представления целого числа в двоичном виде, исключая знак и начальные нули:
>>> n = -37 >>> bin(n) # '-0b100101' >>> n.bit_length() # 6
Эквивалентно:
def bit_length(self): # двоичное представление: bin(-37) => '- 0b100101' s = bin(self) # удалить начальные нули и знак минус s = s.lstrip('-0b') # len('100101') => 6 return len(s)
int.bit_count()
:Добавлен в Python 3.10. Возвращает количество единиц в двоичном представлении абсолютного значения целого числа.
Пример:
>>> n = 19 >>> bin(n) '0b10011' >>> n.bit_count() # 3 >>> (-n).bit_count() # 3
Эквивалентен:
def bit_count(self): return bin(self).count("1")
Новое в Python 3.10.
int.to_bytes(length, byteorder, *, signed=False)
:Возвращает массив байтов, представляющих целое число. Параметры length
, byteorder
являются обязательными:
- length
задает необходимое количество байтов,
- byteorder
определяет в каком порядке возвращать байты и имеют значения 'big'
- от старшего к младшему, 'little'
- от младшего к старшему.
- signed
позволяет установить использование дополнительного кода для представления целого числа. Если signed=False
и задано отрицательное целое число, то бросается OverflowError
.
>>> (1024).to_bytes(2, byteorder='big') # b'\x04\x00' >>> (1024).to_bytes(10, byteorder='big') # b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' >>> (-1024).to_bytes(10, byteorder='big', signed=True) # b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00' >>> x = 1000 >>> x.to_bytes((x.bit_length() + 7) // 8, byteorder='little') # b'\xe8\x03'
Если указанных байтов недостаточно для представления числа, то будет вызвано исключение OverflowError. Что бы узнать порядок байтов который использует платформа используйте sys.byteorder
.
int.from_bytes(bytes, byteorder, *, signed=False)
:Возвращает целое число, которое соответствует указанному массиву байтов.
Параметры bytes
и byteorder
являются обязательными.
- bytes
должен быть байто-подобным объектом (строки байтов, массивы байтов, array.array и т.д.)
- byteorder
определяет в каком порядке возвращать байты и имеют значения 'big'
- от старшего к младшему, 'little'
- от младшего к таршему.
- signed
позволяет установить использование дополнительного кода для представления целого числа. Если signed=False
и задано отрицательное елое число, то бросается OverflowError
.
>>> int.from_bytes(b'\x00\x7f', byteorder = 'big') # 127 >>> int.from_bytes(b'\x00\x7f', byteorder = 'little') # 32512 >>> int.from_bytes(b'\xff\x81', 'big', signed = True) # -127 >>> int.from_bytes([1, 0], 'big') # можно указать "массив" байтов # 256 >>> int.from_bytes([255, 255], 'big') # 65535