В языке Python имеется два целочисленных типа, int и bool. И целые
числа, и логические значения являются неизменяемыми объектами,
но благодаря присутствию в языке Python комбинированных операторов
присваивания эта особенность практически незаметна. В логических
выражениях число 0 и значение False представляют False, а любое
другое целое число и значение True представляют True. В числовых
выражениях значение True представляет 1, а False – 0. Это означает,
что можно записывать весьма странные выражения, например, выражение 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). Создание объекта посредством
использования его типа может быть выполнено одним из трех способов:
x = int() создаст целое число 0. Любые встроенные типы могут вызываться без аргументов.int допускается передавать два аргумента, где первый аргумент – это строка с представлением целого числа, а второй аргумент – число основания системы счисления. Например, вызов int("A4", 16) создаст десятичное значение 164.Таблица 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.