Сложение, вычитание и другая математика в Kotlin
Проще всего разобраться с операциями можно с помощью арифметики. Операция сложения берет два числа и преобразует их в сумму. Операция вычитания берет два числа и преобразует их в разность. Во всех приложениях вы найдете простую арифметику — от подсчета количества лайков до расчета правильного размера и положения кнопки или окна — числа и правда везде!
Содержание статьи
- Простые математические операции в Kotlin
- Десятичные числа в Kotlin
- Операция для получения остатка в Kotlin
- Операции смещения в Kotlin
- Порядок операций в Kotlin
В этом разделе вы узнаете о различных арифметических операциях, которые предлагает Kotlin. В следующих уроках мы разберем операции для типов, отличных от чисел.
Простые математические операции в Kotlin
Все операции в Kotlin используют символ, известный как оператор, для указания типа осуществляемой операции. Рассмотрим четыре арифметические операции, с которым вы знакомы с первого класса: сложение, вычитание, умножение и деление.
Для данных операций в Kotlin используются следующие операторы:
- Сложение:
+
- Вычитание:
-
- Умножение:
*
- Деление:
/
Данные операторы используются следующим образом:
2 + 6 10 — 2 2 * 4 24 / 3
2 + 6 10 — 2 2 * 4 24 / 3 |
Каждая из данных строчек является выражением. У выражения есть значение. В данных случаях у всех четырех выражений одинаковые значения: 8
. Вы набираете код для выполнения операций по аналогии с написанием примеров на бумаге.
В IDE вы увидите значения выражений в выводе на консоли с помощью команды println():
Если хотите, можете убрать пробелы возле оператора:
Разницы нет. Вы можете даже использовать варианты с пробелами и без вперемежку. К примеру:
2+6 // OK 2 + 6 // OK 2 +6 // OK 2+ 6 // OK
2+6 // OK 2 + 6 // OK 2 +6 // OK 2+ 6 // OK |
Однако зачастую удобнее читать выражения с пробелами возле оператора.
Десятичные числа в Kotlin
Во всех операциях выше использовались целые числа, которые относятся к типу
Рассмотрим следующий пример:
22 / 7
22 / 7 |
Результатом данной операции будет число 3
. Это потому что, если вы используете в выражении только целые числа, Kotlin сделает результат также целым числом. В данном случае результат округляется до ближайшего целого числа.
Вы можете указать Kotlin, что нужно использовать десятичные числа, записав их в следующей форме:
22.0 / 7.0
22.0 / 7.0 |
На этот раз результатом будет число 3.142857142857143
Операция для получения остатка % в Kotlin
Четыре операции, с которыми мы работали до сих пор, легко понять, потому что вы с ними хорошо знакомы в жизни. В Kotlin также есть более сложные операции, которые вы можете использовать. Это стандартные математические операции, только менее распространенные. Рассмотрим их.
Сначала разберем операцию остатка, или операцию по модулю. При делении числителя на знаменатель — результатом будет целое число, а также остаток. Этот остаток и является результатом операции по модулю. Например, 10 по модулю 3 равно 1, потому что 3 трижды переходит в 10 с остатком 1.
В Kotlin оператором остатка является символ
, который используется следующим образом:
28 % 10
28 % 10 |
В данном случае результатом будет число 8, которое является остатком при делении 28 на 10. Если вам нужно посчитать то же самое, используя десятичные числа, это можно сделать следующим образом:
28.0 % 10.0
28.0 % 10.0 |
Результат идентичен % без десятичных чисел, что можно увидеть на выводе при использовании указателя формата:
println(«%.
println(«%.0f».format(28.0 % 10.0)) |
Операции смещения в Kotlin
Операции правого и левого смещения (Shift) принимают двоичную форму десятичного числа и смещают цифры налево или направо соответственно. Затем они возвращают десятичную форму нового двоичного числа.
К примеру, десятичное число 14 в бинарном виде будет состоять из восьми цифр — 00001110
. Смещение на два пункта влево приведет к числу 00111000
, которое равно 56 в десятичной системе.
Далее дана схема того, что происходит во время операции смещения:
Цифры, которые приходят на замену пустым местам, становятся 0. Отсеченные числа будут потеряны. Смещение вправо аналогично, но цифры сдвигаются в правую часть.
- Смещение влево:
shl
- Смещение вправо:
shr
Это инфиксные функции, которые помещаются между операндами, чтобы вызов функции выглядел как операция. Позже мы подробнее рассмотрим инфиксные функции в Kotlin.
Далее дан пример:
1 shl 3 32 shr 2
1 shl 3
32 shr 2 |
Оба значения равны 8.
Одна из причин использования смещений — облегчить умножение или деление на числа во второй степени. Обратите внимание, что сдвиг влево на единицу — это то же самое, что умножение на два, сдвиг влево на два — это то же самое, что умножение на четыре и так далее. Со смещением вправо ситуация аналогична.
Раньше код часто использовал этот трюк, потому что сдвиг битов для CPU намного проще, чем сложная арифметика умножения и деления. Следовательно, код был быстрее при использовании смещения. Однако в наши дни процессоры намного быстрее, и компиляторы могут даже преобразовывать умножение и деление на числа во второй степени в сдвиги.
Порядок выполнения операций в Kotlin
Высока вероятность, что при вычислении значений вам нужно будет использовать много различных операций.
((8000 / (5 * 10)) — 32) shr (29 % 5)
((8000 / (5 * 10)) — 32) shr (29 % 5) |
Обратите внимание на использование скобок, у которых в Kotlin две цели: сделать код понятным для чтения и устранить неоднозначность.
Рассмотрим пример:
350 / 5 + 2
350 / 5 + 2 |
Результат будет равен 72 (350 делится на 5, а потом прибавляется 2) или 50 (350 делится на 7)? Те, кто хорошо учился в школе, наверняка с уверенностью воскликнут «72»! И будут абсолютно правы!
Kotlin использует так называемый приоритет операторов. Оператор деления (/
) имеет более высокий приоритет, чем оператор сложения (+
), поэтому в этом примере код сначала выполняет операцию деления.
Если вы хотите, чтобы Kotlin сначала выполнял сложение, то есть возвращал 50, вы можете использовать круглые скобки, например:
350 / (5 + 2)
350 / (5 + 2) |
Правила приоритета аналогичны тому, что вы изучали в школе по математике.
1. Основы Kotlin. Простые функции
К оглавлению
Зміст
- Что такое функция
- Типы параметров / результата функций
- Имена
- Литералы
Что такое функция
Функцией в программировании называется законченный участок программы, решающий определённую задачу — обычно это часть большой задачи, которую решает программа в целом, хотя в простых случаях написание программы сводится к написанию одной функции. Как и у функции в математическом смысле, у функции в программировании есть входы (параметры), выход (результат) и определение, указывающее, как рассчитывается значение выхода по заданным значениям входов.
Определение простых функций на Котлине мало отличается от определения математических функций. Рассмотрим для примера математическую функцию sqr(x) = x2. На Котлине она будет записана так:
fun sqr(x: Int) = x * x // или fun sqr(x: Double) = x * x
В этом определении fun является ключевым словом, с которого начинается определение любой функции в Котлине;fun является сокращением от function — функция. sqr
— это имя функции, x
— = x * x
— телофункции, определяющее, как следует вычислять её результат. Имя функции вместе с её параметрами и ключевым словом fun называется её заголовком.
Поскольку операция вычисления квадрата числа в Котлине отсутствует, результат вычисляется как произведение x * x
. В Котлине присутствуют ещё ряд стандартных операций, перечислим некоторые из них:
- + сложение;
- – вычитание;
- * умножение;
- / деление;
- % остаток от деления;
- () круглые скобки для повышения приоритета операций.
Строчка, начинающаяся с символов
/* Здесь будет длинная и сложная функция с несколькими параметрами */ // Скобочный комментарий начинается с символов /* и заканчивается символами */
Типы параметров / результата функций
Нотация : Int
или : Double
задаёт так называемый тип параметра x
и требует пояснения. Тип в программировании подобен области допустимых значений в математике; математически, запись x: Int
близка к записи x ∈ Z, а x: Double
соответственно x ∈ R. Присутствие в определении функции типов параметров в Котлине обязательно; наличие типов позволяет функции “понять”, для каких входов она применима, а для каких её использование является ошибкой.
Заметим, что тип имеется не только у параметров функции, но и у её результата. Полная запись функции возведения в квадрат в Котлине (для целого параметра) выглядит следующим образом:
fun sqr(x: Int): Int = x * x
Здесь нотация : Int
перед знаком равенства задаёт тип результата функции. В Котлине в некоторых случаях необязательно записывать тип результата функции явно, поскольку функция сама может вывести этот тип, зная типы своих параметров. В данном случае известно, что произведение целого числа на целое также даст целое число, что позволяет использовать сокращённую форму записи без указания типа результата.
В Котлине определяется некоторое количество стандартных типов; помимо них, программист имеет право определять свои типы, используя так называемые классы (о них речь пойдёт позже). На первых порах нам потребуются следующие стандартные типы:
- Int — целое число в диапазоне от -231 до 231-1;
- Double — вещественное число в диапазоне (примерно) от -1.7 * 10308 до 1.7 * 10308, имеющее точность в (примерно) 15 десятичных цифр;
- Boolean — так называемый логический или булевский тип с ровно двумя возможными значениями — true и false;
- Char — символ (одиночный), например
Z
илиЯ
; значением может являться любой символ, присутствующий в таблице “Unicode”, с кодом от 0 до 216-1; - String — строка, состоящая из любого количества (в том числе из нуля) одиночных символов.
Целые и вещественные числа устроены по-разному. Например, целые числа сохраняются в памяти компьютера точно, а вещественные числа — приближённо. Некоторые операции и функции работают по-разному с целыми и вещественными числами. Например, по правилам Котлина 5 / 2
даёт 2
(деление целых чисел), но 5.0 / 2
(или 5 / 2.0
) даёт 2.5
(деление вещественных чисел).
Имена
В приведённых примерах sqr
являлось именем функции, а x
— именем её параметра. По правилам языка Котлин, любое имя обязано начинаться с буквы или символа _ и может состоять из букв, цифр и символа _. Следует помнить, что Котлин различает строчные и прописные буквы; рекомендуется всегда начинать имена параметров и функций со строчной буквы, а имена типов — с прописной буквы. Имя, состоящее из нескольких слов, обычно записывается в так называемой camel case нотации, например bigNumber
. Не рекомендуется:
- использование букв не из латинского алфавита, например
имя
; - использование символа _ и цифр в именах, например
flag_123
; - использование транслитерации в именах, например
dlina
.
Литералы
Литералами в программировании называются константы, записываемые прямо в тексте программы и не имеющие отдельных имён. У любого литерала имеется тип, определяемый по его записи. Примеры литералов в Котлине:
- -7, 0, 42 — литералы типа Int;
- 0.0, 3.14 или 6.67e-11 — литералы типа Double, обязаны иметь как целую, так и дробную часть, запись с символом e означает 6.67 * 10-11;
- true или false — литералы типа Boolean
- ‘Z’ — литерал типа Char, необходимо использовать простые одинарные кавычки;
- “name” — литерал типа String, необходимо использовать простые двойные кавычки.
Ещё раз повторим, что Int и Double — два принципиально разных типа, а значит, 3 и 3.0 — два принципиально разных числовых литерала. В частности, деление целого числа на 3 будет происходить нацело и даст целый результат, а деление целого числа на 3.0 даёт уже вещественный результат.
Сторінки: 1 2 3 4
Как использовать целочисленное деление в Python | Джонатан Хсу | Code 85
Как использовать целочисленное деление в Python | Джонатан Хсу | Код 85 | MediumНаучитесь делить и игнорировать остаток
Опубликовано в·
Чтение через 2 мин.·
5 июня 2021 г. арифметическая операция, при которой выполняется деление, но остаток отбрасывается, оставляя нам только целое число.В других языках программирования комбинация деления и чего-то вроде функции «пол»…
Автор Джонатан Хсу
5,4 тыс. подписчиков
·РедакторЛучший автор с более чем 2,5 млн просмотров. https://medium.com/@jhsu98/membership
Еще от Джонатана Хсу и Code 85
Джонатан Хсу
в
Как сравнить два набора в Python
9 0006Воспользуйтесь преимуществами встроенного методы для легкого сравнения
·чтение за 5 минут·28 января 2020 г.Джонатан Хсу
в
Как запросить родительские и дочерние отношения в SOQL
Простой запрос родительских или дочерних данных объекта
·3 мин чтения·18 июня 2021 г. Натан Хсув
Как Остановить арифметические ошибки с плавающей точкой в Python
Как заменить циклы Python на карту и фильтр , и уменьшить
Напишите больше семантического кода с помощью функционального программирования
·3 мин чтения·14 декабря 2019 г.Просмотреть все от Джонатана Хсу 05
в
Вы используете ChatGPT Неправильный! Вот как опередить 99% пользователей ChatGPT
Освойте ChatGPT, изучив технику быстрого доступа.
·7 мин чтения·17 мартаUlas Can Cengiz
Освоение обработки исключений в Python: лучшие практики и советы
Советы экспертов по обработке исключений в Python
·Чтение за 8 минут·20 январяСписки
Истории, которые помогут вам расти как разработчику программного обеспечения
19 историй·45 сохранений 90 005
Лидерство
30 этажей· 16 сохранений
Хорошее мышление о продукте
11 историй·46 сохранений
Что такое ChatGPT?
9 историй·43 сохранения
Александр Нгуен
in
Почему я продолжаю отказывать кандидатам во время собеседований в Google…
Они не соответствуют планке.
·4 минуты чтения·13 апреляMatt Chapman
in
Портфолио, благодаря которому я получил работу специалиста по данным
Спойлер: это было на удивление просто (и бесплатно) сделать
· Чтение за 10 минут · 24 мартаЯн Чжоу
в
9 встроенных декораторов Python, которые значительно оптимизируют ваш код
Делайте больше меньшими средствами: используйте возможности декораторов
·7 мин чтения·1 январяNick Hemenway
in
Мой любимый способ сгладить зашумленные данные с помощью Python
Почти все реальные данные зашумлены. Что я имею в виду под шумным? Рассмотрим следующий простой пример: у меня есть масса, прикрепленная к пружине -…
· 7 минут прочтения · 4 декабря 2022 г.См. Дополнительные рекомендации
Статус
Карьера
Текст
Как Делать деление в Java (целые числа и числа с плавающей запятой) 05/2023
Нгуен Тхань Шон
Учебник по Java: Целочисленное деление
Учебник по Java: Целочисленное деление
Эта статья была просмотрена 47 749 раз.
Подробнее…
В Java существует два типа деления — целочисленное деление и деление с плавающей запятой. Оба типа используют символ косой черты (/) в качестве оператора, следующего за форматом делимое/делитель. Читайте дальше, чтобы узнать, как разделить два целых числа (недесятичные целые числа), чтобы получить целочисленное частное, и как использовать деление с плавающей запятой, чтобы получить десятичный результат.
Шаги
Целочисленное деление
- 1Когда вы делите два целых числа в Java, дробная часть (остаток) отбрасывается. Например, если вы разделите 7 на 3 на бумаге, вы получите 2 с остатком 1. Но когда вы делите два целых числа в Java, остаток удаляется, и ответ будет просто 2.[1] X Источник исследования Чтобы использовать целочисленное деление, вы должны использовать следующий синтаксис:
int a = 7; интервал б = 3; инт результат = а/б; // результатом будет 2
- Деление двух целых чисел всегда приводит к целому числу. Если вы хотите получить десятичный результат от деления двух целых чисел, используйте деление с плавающей запятой.
- Если вы попытаетесь разделить целое число на 0 с помощью целочисленного деления, вы получите ошибку ArithmeticException во время выполнения, даже если программа компилируется нормально.[2] X Источник исследования
Деление с плавающей запятой
- 1Если какой-либо из операндов в уравнении имеет тип float или double, вам нужно будет использовать деление с плавающей запятой. Вы также можете использовать деление с плавающей запятой, если вы делите два числа и хотите получить десятичный результат. Чтобы использовать этот тип деления, установите делимое и делитель в число с плавающей запятой.[3] X Источник исследования В нашем примере с делением 7 на 3 наш код будет выглядеть так:
с плавающей запятой а = 7,0f; поплавок b = 3,0f; инт результат = а/б; // результатом будет 2,33
- При делении на ноль с делением с плавающей запятой результатом будет NaN (не число).[4] X Источник исследований
Вопросы и ответы экспертов
Видео
Советы
- При делении смешанных целых чисел и чисел с плавающей запятой значения с плавающей запятой (float или double) автоматически преобразуются в тип double при делении.