Целочисленные типы

В языке Python имеется два целочисленных типа, int и bool. И целые числа, и логические значения являются неизменяемыми объектами, но благодаря присутствию в языке Python комбинированных операторов присваивания эта особенность практически незаметна. В логических выражениях число 0 и значение False представляют False, а любое другое целое число и значение True представляют True. В числовых выражениях значение True представляет 1, а False0. Это означает, что можно записывать весьма странные выражения, например, выражение i += True увеличит значение i на единицу. Естественно, более правильным будет записывать подобные выражения как i += 1.

Размер целого числа ограничивается только объемом памяти компьютера, поэтому легко можно создать и обрабатывать целое число, состоящее из тысяч цифр, правда, скорость работы с такими числами существенно медленнее, чем с числами, которые соответствуют машинному представлению.

Литералы целых чисел по умолчанию записываются в десятичной сис- теме счисления, но при желании можно использовать другие системы счисления:

>>> 14600926
14600926
>>> 0b110111101100101011011110
14600926
>>> 0o67545336
14600926
>>> 0xDECADE
14600926

Двоичные числа записываются с префиксом 0b, восьмеричные – в префиксом 0o и шестнадцатеричные – с префиксом 0x. В префиксах допускается использовать символы верхнего регистра.

При работе с целыми числами могут использоваться обычные математические функции и операторы, как показано в табл. 1. Для арифметических операций +, -, /, //, % и ** имеются соответствующие комбинированные операторы присваивания: +=, -=, /=, //=, %= и **=, где выражение x op= y является эквивалентом выражения x = x op y.

Таблица 1. Арифметические операторы и функции

Синтаксис Описание
x + y Складывает число x и число y
x - y Вычитает число y из числа x
x * y Умножает x на y
x / y Делит x на y – результатом всегда является значение типа float (или complex, если x или y является комплексным числом)
x // y Делит x на y, при этом усекает дробную часть, поэтому результатом всегда является значение типа int; смотрите также функцию round()
x % y Возвращает модуль (остаток) от деления x на y
x**y Возводит x в степень y; смотрите также функцию pow()
-x Изменяет знак числа x, если оно не является нулем, если ноль – ничего не происходит
+x Ничего не делает иногда используется для повышения удобочитаемости программного кода
abs(x) Возвращает абсолютное значение x
divmod(x, y) Возвращает частное и остаток деления x на y в виде кортежа двух значений типа int
pow(x, y) Возводит x в степень y; то же самое что и оператор **
pow(x, y, z) Более быстрая альтернатива выражению (x ** y) % z
round(x, n) Возвращает значение типа int, соответствующее значению x типа float, округленному до ближайшего целого числа (или значение типа float, округленное до \( n \)-го знака после запятой, если задан аргумент n)

Объекты могут создаваться путем присваивания литералов переменным, например, x = 17, или обращением к имени соответствующего типа как к функции, например, x = int(17). Создание объекта посредством использования его типа может быть выполнено одним из трех способов:

Таблица 2. Функции преобразования целых чисел

Синтаксис Описание
bin(i) Возвращает двоичное представление целого числа i в виде строки, например, bin(1980) == '0b11110111100'
hex(i) Возвращает шестнадцатеричное представление целого числа i в виде строки, например, hex(1980) == '0x7bc'
int(x) Преобразует объект x в целое число; в случае ошибки во время преобразования возбуждает исключение ValueError, а если тип объекта x не поддерживает преобразование в целое число возбуждает исключение TypeError. Если x является числом с плавающей точкой, оно преобразуется в целое число путем усечения дробной части.
int(s, base) Преобразует строку s в целое число; в случае ошибки возбуждает исключение ValueError. Если задан необязательный аргумент base, он должен быть целым числом в диапазоне от 2 до 36 включительно.
oct(i) Возвращает восьмеричное представление целого числа i в виде строки, например, oct(1980) == '0o3674'

В табл. datatype:tbl:3 перечислены битовые операторы. Все битовые операторы (|, ^, &, << и >>) имеют соответствующие комбинированные операторы присваивания (|=, ^=, &=, <<= и >>=), где выражение i op= j является логическим эквивалентом выражения i = i op j в случае, когда обращение к значению i не имеет побочных эффектов.

Таблица 3. Функции преобразования целых чисел

Синтаксис Описание
i | j Битовая операция OR (ИЛИ) над целыми числами i и j; отрицательные числа представляются как двоичное дополнение
i ^ j Битовая операция XOR (исключающее ИЛИ) над целыми числами i и j
i & j Битовая операция AND (И) над целыми числами i и j
i << j Сдвигает значение i влево на j битов аналогично операции i * (2 ** j) без проверки на переполнение
i >> j Сдвигает значение i вправо на j битов аналогично операции i // (2 ** j) без проверки на переполнение
\~i Инвертирует биты числа i

Логические значения

Существует два встроенных логических объекта: True и False. Как и все остальные типы данных в языке Python (встроенные, библиотечные или ваши собственные), тип данных bool может вызываться как функция – при вызове без аргументов возвращается значение False, при вызове с аргументом типа bool возвращается копия аргумента, а при вызове с любым другим аргументом предпринимается попытка преобразовать указанный объект в тип bool. Все встроенные типы данных и типы данных из стандартной библиотеки могут быть преобразованы в тип bool, а добавить поддержку такого преобразования в свои собственные типы данных не представляет никакой сложности. Ниже приводится пара присваиваний логических значений и пара логических выражений:

>>> t = True
>>> f = False
>>> t and f
False
>>> t and True
True

в языке Python имеется три логических оператора: and, or и not. Выражения с участием операторов and и or вычисляются в соответствии с логикой сокращенных вычислений (short-circuit logic), и возвращается операнд, определяющий значение всего выражения, тогда как результатом оператора not всегда является либо True, либо False.