Python. Числа и операции с ними. Встроенные функции int(), bin(), oct(), hex(), float(), complex(), (6)
Числа и операции с ними
В Python числа могут быть целыми (int), вещественными (float) и комплексными (complex).
Целое число в десятичной форме ничем не отличается от обыкновенного числа, например — 1
Целое число в двоичной форме имеет вид — 0b111. Перед числом стоит 0b, дальше следует само число в двоичной форме 111.
Целое число в восьмеричной форме имеет вид – 0o8. Перед числом стоит 0o (ноль и буква о), дальше следует само число в восьмеричной форме 8.
Целое число в шестнадцатеричной форме имеет вид – 0xAF. Перед числом стоит 0x, дальше следует само число в двоичной форме AF.
Существуют встроенные функции для преобразования целого числа из одной системы исчисления в другую. В двоичное число bin(), в восьмеричное число(oct()) и шестнадцатеричное число(hex().
Для преобразования в десятичное число существует встроенная функция int()
Функция int() имеет два аргумента. Первый аргумент — значение, которое нужно преобразовать в целое число, второй аргумент (необязательный) система исчисления в которой задан первый аргумент (может быть от 2 до 36), по умолчанию второй аргумент равен 10. При использовании второго аргумента отличного от 10 — первый аргумент должен быть представлен в виде строки.
Преобразуем строку в целое число.
Преобразуем вещественное число в целое число (дробная часть отбрасывается без округления):
Преобразуем число из тридцатеричной системе исчислений в целое десятичное число.
При использовании второго аргумента если первый аргумент функции int() представлен не строкой, получается ошибка.
Traceback (most recent call last):
Python Shell, prompt 12, line 1
builtins.TypeError: int() can’t convert non-string with explicit base
Для преобразования целого числа в двоичную форму используется функция bin(). Функция bin() принимает один аргумент – целое десятичное число. Возвращает строку (str).
Для преобразования целого числа в восьмеричную форму используется функция oct(). Функция oct() принимает один аргумент – целое число. Возвращает строку.
Для преобразования целого числа в шестнадцатеричную форму используется функция hex(). Функция hex() принимает один аргумент – целое число. Возвращает строку.
Вещественные числа (float). Встроенная функция float()
Как я понял вещественные, числа с дробной частью и числа с плавающей запятой это разные названия числа вида: 7.0 или 77.12 и т.д и т.п.
Получить вещественное число можно с помощью функции float(). Аргумент у функции один и он может быть числом или строкой. Возвращает число типа float.
Передаем функции float() аргумент в виде целого числа.
Передаем функции float() аргумент в виде строки (str).
Комплексные числа (complex). Встроенная функция compex()
Числа содержащие мнимую часть и имеют вид:
Для преобразования в комплексное число есть функция complex(). Она имеет два аргумента первый действительная часть, второй аргумент мнимая часть. Оба аргумента должны быть целыми числами(int) или вещественными числами (float). Возвращает комплексное число (complex).
Математику я учил давно и до сих пор так и не встретил случая, где бы я мог применить их. Так, что на данный момент можно констатировать, что в Python есть комплексные числа и это пока все.
>>>1 + 2 сложение целого числа с целым получаем
>>>1.0 + 2 сложение вещественного числа с целым получаем
3.0 вещественное число
>>>3 + 5 +(1 + 7.0) если в выражении есть вещественное число результатом всегда будет
16.0 вещественное число
>>>5 – 3 Вычитаем из целого числа целое число получаем
>>>5 — 3.0 Вычитаем из целого числа вещественное число получаем
2.0 вещественное число
>>>2 * 3 Умножаем целое число на целое число получаем
>>>2 * 3.0 Умножаем целое число на вещественное число получаем
6.0 вещественное число
Деления в Python три:
>>>4 / 2 Делим целое число на целое число получаем
2.0 вещественное число
>>>4.0 / 2.0 Делим вещественное число на вещественное число
получаем
2.0 вещественное число
// Целочисленное деление – деление с округлением к меньшему. При таком округлении дробная часть отбрасывается, а целая часть округляется в меньшую сторону.
В случае, когда результатом вычисления является положительное число, то берется целая часть без изменений.
>>>5 // 2 Делим целое число на целое число получаем
>>>-3.0 // -2 Делим вещественное число на целое число получаем
1.0 вещественное число
В случае, когда результатом вычисления является отрицательное число, при округлении к меньшему, дробная часть отбрасывается, а целая часть числа уменьшается на единицу.
>>>5 // -2 Делим целое число на целое число получаем
-3 целое число, так то получаем -2.5, округляем к
меньшему получаем — 3
>>>-6.0 // 2.5 Делим вещественное число на вещественное число
получаем
-3.0 вещественное число
% Деление по модулю. Результатом деления по модулю является остаток от деления левой части выражения (делимого) на правую часть выражения (делитель), остаток будет всегда положительным числом.
>>>300 % 80 Делим по модулю получаем после деления на цело
>>>5.0 % 100 Делим по модулю получаем
5.0 т.к. 5 на 100 без получения дробной части не делится
ответ — 5
** Возведение в степень
>>>5 ** 2 Возводим целое число в степень тоже целое число
получаем
>>>2.0 ** 4 возводим вещественное число в степень (целое число)
получаем
16.0 вещественное число
Как видно из примеров если в выражении присутствует вещественное число, то ответом будет – вещественное число.
Приоритет выполнения операций как в арифметике.
>>>5 + 190 // 2 ** 2 % 10 * 5 / 4 — 2
Операции выполняются слева-направо и согласно приоритета.
1. Возведение в степень 2**2 = 4
2. Целочисленное деление 190//4=47
3. Деление по модулю 47%10=7
6. Сложение 5+8.75=13.75
7. Вычитание 13.75-2=11.75
Самый старший приоритет — возведение в степень
Следующий приоритет — Умножение *, Деление /, Целочисленное деление //, Деление по модулю % у этих операция приоритет одинаковый если они встречаются в одном примере то выполняются в порядке очереди слева-направо.
Следующий приоритет у сложения + и вычитания они выполняются самыми последними.
Если необходимо поменять приоритеты операций нужно воспользоваться скобками. Операции в скобках выполняются первыми.
Это все что я вычитал про числа.
По ссылкам можно почитать мои конспекты:
Tools & Thoughts
This page allows you to convert between the decimal representation of numbers (like «1.02») and the binary format used by all modern CPUs (IEEE 754 floating point).
Update
There has been an update in the way the number is displayed. Previous version would give you the represented value as a possibly rounded decimal number and the same number with the increased precision of a 64-bit double precision float. Now the original number is shown (either as the number that was entered, or as a possibly rounded decimal string) as well as the actual full precision decimal number that the float value is representing. Entering «0.1» is — as always — a nice example to see this behaviour. The difference between both values is shown as well, so you can easier tell the difference between what you entered and what you get in IEEE-754.
This webpage is a tool to understand IEEE-754 floating point numbers. This is the format in which almost all CPUs represent non-integer numbers. As this format is using base-2, there can be surprising differences in what numbers can be represented easily in decimal and which numbers can be represented in IEEE-754. As an example, try «0.1». The conversion is limited to 32-bit single precision numbers, while the IEEE-754-Standard contains formats with increased precision.
Usage:
You can either convert a number by choosing its binary representation in the button-bar, the other fields will be updated immediately. Or you can enter a binary number, a hexnumber or the decimal representation into the corresponding textfield and press return to update the other fields. To make it easier to spot eventual rounding errors, the selected float number is displayed after conversion to double precision.
Special Values:
You can enter the words «Infinity», «-Infinity» or «NaN» to get the corresponding special values for IEEE-754. Please note there are two kinds of zero: +0 and -0.
Conversion:
The value of a IEEE-754 number is computed as:
sign 2 exponent mantissa
The sign is stored in bit 32. The exponent can be computed from bits 24-31 by subtracting 127. The mantissa (also known as significand or fraction) is stored in bits 1-23. An invisible leading bit (i.e. it is not actually stored) with value 1.0 is placed in front, then bit 23 has a value of 1/2, bit 22 has value 1/4 etc. As a result, the mantissa has a value between 1.0 and 2. If the exponent reaches -127 (binary 00000000), the leading 1 is no longer used to enable gradual underflow.
Underflow:
If the exponent has minimum value (all zero), special rules for denormalized values are followed. The exponent value is set to 2 -126 and the «invisible» leading bit for the mantissa is no longer used.
The range of the mantissa is now [0:1).
Note: The converter used to show denormalized exponents as 2 -127 and a denormalized mantissa range [0:2). This is effectively identical to the values above, with a factor of two shifted between exponent and mantissa. However this confused people and was therefore changed (2015-09-26).
Rounding errors:
Not every decimal number can be expressed exactly as a floating point number. This can be seen when entering «0.1» and examining its binary representation which is either slightly smaller or larger, depending on the last bit.
Other representations:
The hex representation is just the integer value of the bitstring printed as hex. Don’t confuse this with true hexadecimal floating point values in the style of 0xab.12ef.
FAQ (Frequently Asked Questions):
Can you send me the source code? I need to convert format x to format y.:
This source code for this converter doesn’t contain any low level conversion routines. The conversion between a floating point number (i.e. a 32 bit area in memory) and the bit representation isn’t actually a conversion, but just a reinterpretation of the same data in memory. This can be easily done with typecasts in C/C++ or with some bitfiddling via java.lang.Float.floatToIntBits in Java. The conversion between a string containing the textual form of a floating point number (e.g. «3.14159», a string of 7 characters) and a 32 bit floating point number is also performed by library routines. If you need to write such a routine yourself, you should have a look at the sourecode of a standard C library (e.g. GNU libc, uclibc or the FreeBSD C library — please have a look at the licenses before copying the code) — be aware, these conversions can be complicated.
Can you add support for 64-bit float/16-bit float/non-IEEE 754 float?.:
This page relies on existing conversion routines, so formats not usually supported in standard libraries cannot be supported with reasonable effort. Double-precision (64-bit) floats would work, but this too is some work to support alongside single precision floats. As the primary purpose of this site is to support people learning about these formats, supporting other formats is not really a priority.
I’ve converted a number to floating point by hand/some other method, and I get a different result. Your converter is wrong!
Possible, but unlikely. The conversion routines are pretty accurate (see above). Until now, checking the results always proved the other conversion less accurate. First, consider what «correct» means in this context — unless the conversion has no rounding error, there are two reasonable results, one slightly smaller the entered value and one slightly bigger. The best result is usually the one closer to the value that was entered, so you should check for that. Please check the actual represented value (second text line) and compare the difference to the expected decimal value while toggling the last bits.
Note: If you find any problems, please report them here.
Функция перевода из int to hex и обратно. Не ужели нет стандартных функций?
Нужно сейчас написать програмку на Visual C++ (Microsoft Visual C++ 6.0).
Начал писать и столкнулся с полным отстутствеим стандартным уже для всех языков функционалом.
Подскажите пожалйста названия функций для:
— конвертации из int в hex
— конвертации из hex в int
— конвертации из hex в bin
— из int в string/char и обратно.
В справочниках я не нашел этог к сожалению.
Заранее большое спасибо.
Функция перевода из Float в Hex
Подскажите функции для перевода вещественного числа в шестнадцатеричное число, и будет ли она.
Функция перевода строчных букв в прописные и обратно
Написать функцию перевода строчных букв, введенного с клавиатуры текста, в прописные и обратно.
Функция: вычисление наименьшего общего кратного без использования стандартных функций
Нужно написать функцию, которая вычисляет наименьшее общее кратное двух заданных на входе.
Существует ли метод/функция перевода значения символьной переменной в int
Хотел спросить, существует ли метод/функция перевода значения символьной ПЕРЕМЕННОЙ в int?
ну тогда с bin, hex надеюсь понятно — определяется параметром в itoa
а лучше пользоваться sprintf — он переносимый, в отличии от itoa
ну тогда с bin, hex надеюсь понятно — определяется параметром в itoa
Опять не работает:
выдает ошибки что не может конвертировать int 1 to Char *
Приведу пример того что есть:
P.S. на php например можно просто написать str=a+b; или str.=a; str.=b; . а здесь. все плохо
сами посудите: результат не влезет в один символ
Кто спорит Просто сейчас стоит задача максимально доступными способами написать прогу.
А разбиратся с тем есть ли у С++ условные ifelse и как оно устроено . пока как видите другие проблемыю.
Сейчас провеорю. примерно я понял проблему. т.е. если я не указываю размерность char и присваиваю её первое значение в один символ, то она автоматом объявляется как размером в один символ.
Ну там первый символ в другом месте считается.
Сейчас попробую выставить размерности.
Добавлено через 5 минут
Сделал так:
Не работает. куча ошибок.
Добавлено через 6 минут
Вобщем ругается на условия:
error C2440: ‘=’ : cannot convert from ‘const char’ to ‘char [1]’
Бред.
Не нравится ей что там 1 символ. мать мать перемать.
Забил на перевод из dec в hex . воспользовался sprintf с параметром %X.
А есть какая-нить функция для перевода dec или hex в двоичный формат?
Добавлено через 8 часов 50 минут
Результат выполнения функции: