Разное

Java число по модулю: Java – Math.abs() – модуль числа

Модуль 6. Урок 3. Преобразование строк в числа и обратно.

Для перемещения по курсу нужно зарегистрироваться

1. Модуль 1. Урок 1. Введение в Java. ↳ теория

2. Модуль 1. Урок 2. Виды языков программирования и место языка Java среди них. ↳ теория / тесты

3. Модуль 1. Урок 3. Из чего состоит Java. ↳ теория / тесты

4. Модуль 1. Урок 4. Основы работы в терминале (ознакомительный). ↳ теория / тесты

5. Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. ↳ теория / тесты

6. Модуль 2. Урок 1. Введение в ООП. ↳ теория / тесты

7. Модуль 2. Урок 2. Типы данных в Java. ↳ теория / тесты

8. Модуль 2. Урок 3. Работа с экземплярами в Java. ↳ теория / тесты

9. Модуль 2. Урок 4. Пакеты в Java. ↳ теория / тесты

10. Модуль 3. Урок 1. Основы использования и создания методов в классах. ↳ теория / тесты

11. Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. ↳ теория / тесты

12. Модуль 3. Урок 3. Уровни методов в Java. ↳ теория / тесты

13. Модуль 3. Урок 4. Наследование в Java. ↳ теория / тесты

14. Модуль 3. Урок 5. Аннотация @Override в Java. ↳ теория / тесты

15. Модуль 4. Урок 1. Условный оператор IF в Java. ↳ теория / тесты

16. Модуль 4. Урок 2. Массивы в Java. ↳ теория / тесты

17. Модуль 4. Урок 3. Циклы в Java. ↳ теория / тесты

18. Модуль 4. Урок 4. Оператор SWITCH в Java. ↳ теория / тесты

19. Модуль 5. Урок 1. Уровни доступа в Java. ↳ теория / тесты

20. Модуль 5. Урок 2. Конструкторы в Java. ↳ теория / тесты

21. Модуль 5. Урок 3. Неизменяемые объекты. ↳ теория / тесты

22. Модуль 5. Урок 4. Паттерн проектирования Builder. ↳ теория / тесты

23. Модуль 5. Урок 5. Перечисления в Java. ↳ теория / тесты

24. Модуль 6. Урок 1. Составные строки в Java. ↳ теория / тесты

25. Модуль 6. Урок 2. Манипуляции c символами. ↳ теория / тесты

26. Модуль 6. Урок 3. Преобразование строк в числа и обратно. ↳ теория / тесты

27. Модуль 7. Урок 1. Интерфейсы в Java. ↳ теория / тесты

28. Модуль 7. Урок 2. Абстрактные классы. ↳ теория / тесты

29. Модуль 7. Урок 3. Интерфейс List в Java. ↳ теория / тесты

30. Модуль 8. Урок 1. Nested (static) классы в Java. ↳ теория / тесты

31. Модуль 8. Урок 2. Inner (non-static) классы в Java. ↳ теория / тесты

32. Модуль 8. Урок 3. Анонимные классы в Java. ↳ теория / тесты

33. Модуль 9. Урок 1. Исключения в Java. ↳ теория / тесты

34. Модуль 9. Урок 2. Иерархия исключений. ↳ теория / тесты

35. Модуль 10. Урок 1. Проект ХО. ↳ теория

36. Модуль 10. Урок 2. Проект ХО. ↳ теория

37. Модуль 10. Урок 3. Проект ХО. ↳ теория

38. Модуль 10. Урок 4. Проект ХО. ↳ теория

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

Модуль 4. Урок 3. Циклы в Java.

Для перемещения по курсу нужно зарегистрироваться

1. Модуль 1. Урок 1. Введение в Java. ↳ теория

2. Модуль 1. Урок 2. Виды языков программирования и место языка Java среди них. ↳ теория / тесты

3. Модуль 1. Урок 3. Из чего состоит Java. ↳ теория / тесты

4. Модуль 1. Урок 4. Основы работы в терминале (ознакомительный). ↳ теория / тесты

5. Модуль 1. Урок 5. Настройка окружающей среды для разработки на языке Java. ↳ теория / тесты

6. Модуль 2. Урок 1. Введение в ООП. ↳ теория / тесты

7. Модуль 2. Урок 2. Типы данных в Java. ↳ теория / тесты

8. Модуль 2. Урок 3. Работа с экземплярами в Java. ↳ теория / тесты

9. Модуль 2. Урок 4. Пакеты в Java. ↳ теория / тесты

10. Модуль 3. Урок 1. Основы использования и создания методов в классах. ↳ теория / тесты

11. Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. ↳ теория / тесты

12. Модуль 3. Урок 3. Уровни методов в Java. ↳ теория / тесты

13. Модуль 3. Урок 4. Наследование в Java. ↳ теория / тесты

14. Модуль 3. Урок 5. Аннотация @Override в Java. ↳ теория / тесты

15. Модуль 4. Урок 1. Условный оператор IF в Java. ↳ теория / тесты

16. Модуль 4. Урок 2. Массивы в Java. ↳ теория / тесты

17. Модуль 4. Урок 3. Циклы в Java. ↳ теория / тесты

18. Модуль 4. Урок 4. Оператор SWITCH в Java. ↳ теория / тесты

19. Модуль 5. Урок 1. Уровни доступа в Java. ↳ теория / тесты

20. Модуль 5. Урок 2. Конструкторы в Java. ↳ теория / тесты

21. Модуль 5. Урок 3. Неизменяемые объекты. ↳ теория / тесты

22. Модуль 5. Урок 4. Паттерн проектирования Builder. ↳ теория / тесты

23. Модуль 5. Урок 5. Перечисления в Java. ↳ теория / тесты

24. Модуль 6. Урок 1. Составные строки в Java. ↳ теория / тесты

25. Модуль 6. Урок 2. Манипуляции c символами. ↳ теория / тесты

26. Модуль 6. Урок 3. Преобразование строк в числа и обратно. ↳ теория / тесты

27. Модуль 7. Урок 1. Интерфейсы в Java. ↳ теория / тесты

28. Модуль 7. Урок 2. Абстрактные классы. ↳ теория / тесты

29. Модуль 7. Урок 3. Интерфейс List в Java. ↳ теория / тесты

30. Модуль 8. Урок 1. Nested (static) классы в Java. ↳ теория / тесты

31. Модуль 8. Урок 2. Inner (non-static) классы в Java. ↳ теория / тесты

32. Модуль 8. Урок 3. Анонимные классы в Java. ↳ теория / тесты

33. Модуль 9. Урок 1. Исключения в Java. ↳ теория / тесты

34. Модуль 9. Урок 2. Иерархия исключений. ↳ теория / тесты

35. Модуль 10. Урок 1. Проект ХО. ↳ теория

36. Модуль 10. Урок 2. Проект ХО. ↳ теория

37. Модуль 10. Урок 3. Проект ХО. ↳ теория

38. Модуль 10. Урок 4. Проект ХО. ↳ теория

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

java — Как использовать модуль для float/double?

спросил

Изменено 11 месяцев назад

Просмотрено 139 тысяч раз

Я создаю калькулятор RPN для школьного проекта и у меня возникли проблемы с оператором модуля. Поскольку мы используем тип данных double, модуль не будет работать с числами с плавающей запятой. Например, 0,5 % 0,3 должно вернуть 0,2, но я получаю исключение деления на ноль.

В инструкции сказано использовать fmod()

. Я везде искал fmod() , включая javadoc, но не могу найти. Я начинаю думать, что это метод, который мне придется создать?

Редактировать: Хм, странно. Я только что снова ввел эти цифры, и, похоже, все работает нормально… но на всякий случай. Нужно ли мне следить за использованием оператора мода в Java при использовании плавающих типов? Я знаю, что что-то подобное невозможно сделать на С++ (я думаю).

  • ява
  • по модулю

У вас, вероятно, была опечатка при первом запуске.

оценка 0,5 % 0,3 возвращает «0,2» (двойное число), как и ожидалось.

У Mindprod есть хороший обзор того, как модуль работает в Java.

7

В отличие от C, Java позволяет использовать % как для целых чисел, так и для чисел с плавающей запятой, и (в отличие от C89 и C++) он четко определен для всех входных данных (включая отрицательные значения):

Из JLS §15.

17.3:

Результат с плавающей запятой остаточная операция определяется правила арифметики IEEE:

  • Если любой из операндов равен NaN, результатом будет NaN.
  • Если результат не NaN, знак результата равен знаку дивиденд.
  • Если делимое равно бесконечности, или делитель равен нулю, или и то, и другое, результат NaN.
  • Если делимое конечно, а делитель равен бесконечности, результат равняется дивиденду.
  • Если делимое равно нулю, а делитель конечен, результат равняется дивиденду.
  • В остальных случаях, когда ни бесконечность, ни ноль, ни NaN участвует, число с плавающей запятой остаток r от деления a делимое n на делитель d определяется по математическому соотношению r=n-(d·q) где q — целое число, отрицательное только если n/d отрицательное и положительное только если n/d положительно, и величина как можно больше не превышая величины истинное математическое частное n и d.

Итак, для вашего примера 0,5/0,3 = 1,6… . q имеет тот же знак (положительный), что и 0,5 (делимое), а величина равна 1 (целое число с наибольшей величиной, не превышающей величину 1,6…), и r = 0,5 — (0,3 * 1) = 0,2

1

Я думал, что в Java для этого подойдет обычный оператор модуля, но его нетрудно закодировать. Просто разделите числитель на знаменатель и возьмите целую часть результата. Умножьте это на знаменатель и вычтите результат из числителя.

 х = н/д
xint = целая часть x
результат = n - d*xint
 

2

fmod — стандартная функция C для обработки модуля с плавающей запятой; Я предполагаю, что ваш источник говорил, что Java обрабатывает модуль с плавающей запятой так же, как функция C fmod . В Java вы можете использовать оператор % для двойных чисел так же, как и для целых чисел:

 int x = 5 % 3; // х = 2
двойной у = 0,5 % 0,3; // у = 0,2
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Модуль

: Глоссарий Java

В Java вы берете остаток с помощью оператора %. % неофициально называется модулем оператора (иногда называемого модом или по модулю), хотя математики и серьезные компьютерщики умоляли бы чтобы отличаться, это оператор остатка, а не модуль. JLS (спецификация языка Java) правильно относится к это как оператор остатка.

К счастью, деление Java обладает евклидовым свойством, а именно когда вы умножаете частное на делитель и добавляете остаток, вы получаете обратно дивиденд. Когда вы запрашиваете % 3 в Java, вы можете быть изумлен тем, что иногда получаю ответ за пределами диапазона 0..2. См. правила знака остатка/модуля. Будьте особенно осторожны, когда объединение случайных чисел в меньший диапазон с помощью оператора %.

Отрицательные операнды

Модуль Java ведет себя, ну, странно. В Java знак остатка следует за делимым, а не за делителем как и следовало ожидать. % может дать отрицательный результат даже с положительным делителем. Будьте особенно осторожны при подборе случайных чисел в меньший диапазон с оператором модуля, например. wheel.nextInt() % 3 даст вам числа -2 .. +2, а не 0..2, как можно было бы ожидать.

Например, когда вы вычисляете день недели, беря day_number % 7 в Java вы будете поражены, иногда получая отрицательный ответ вне диапазона 0 .. 6, а именно при дивиденд отрицательный. Смотри правила знаков. Ява деление усеченное деление.

Смешанные базовые расчеты

Оператор модуля полезен во времени расчет, т. грамм. сколько дней, часов, минут, секунд, миллисекунд 112 233 445 566 778 899 миллисекунд? Проще перейти от дней, часов, минут и секунд к миллисекундам. Вы просто умножаете каждый компонент на
 static final long MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000L;
static final long MILLISECONDS_PER_HOUR = 60 * 60 * 1000L;
static final long MILLISECONDS_PER_MINUTE = 60 * 1000L;
static final long MILLISECONDS_PER_SECOND = 1000L;
длинные миллисекунды = дни * MILLISECONDS_PER_DAY + часы * MILLISECONDS_PER_HOUR
              + минут * MILLISECONDS_PER_MINUTE
              + секунд * MILLISECONDS_PER_SECOND
              + миллисекунды; 
Это довольно упрощенный ответ на проблему. Более сложные ответы см. Календарь.

Вы можете использовать подобную логику для работы с другими дурацкими смешанными базовыми системами, такими как широта и долгота с ее градусами, минутами и секундами, ярдами, футами и дюймами или тонн, фунтов и унций. APL (язык программирования) имеет встроенные операторы для аккуратной обработки. В Яве вы должны кодировать преобразования от руки.

Остаток, модуль и деление часто определяются причудливым образом на компьютерных языках, часто для того, чтобы его можно было быстро и легко реализовать на авторском оборудовании. Java имеет %, оператор остатка, но не имеет встроенного оператора модуля или функции.
Знаки отдел / Остаток % Модуль
+ + 7/4 = 1 7 % 4 = 3 7 мод 4 = 3
— + -7 / 4 = -1 -7 % 4 = -3 -7 мод 4 = 1
+ — 7 / -4 = -1 7 % -4 = 3 7 мод -4 = -1
— — -7 / -4 = +1 -7 % -4 = -3 -7 mod -4 = -3

Оттачивание своей интуиции

Изучив закономерности в следующие три таблицы % остатка Java, mod математический модуль и / целочисленное деление, у вас будет лучшее представление о том, как они Работа. Обратите внимание, что для Java% знак делителя не имеет значения. Знак результат следует за знаком делимого. Примечание для математического модуля, результат всегда в диапазоне 0..divisor-1 для положительных делителей, независимо от знака делимое и результат всегда находятся в диапазоне divisor+1..0 для отрицательного делителей независимо от знака делимого. % и модуль дают то же самое получается при совпадении знаков делимого и делителя. Интересно отметить, как сложные симметрии и повторения.
отдел
отдел
Целочисленное деление: столбец/ряд
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
-10 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -10
-9 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -9
-8 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -8
-7 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -7
-6 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -6
-5 2 1 1 1 1 1 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -2 -5
-4 2 2 2 1 1 1 1 0 0 0 0 0 0 0 -1 -1 -1 -1 -2 -2 -2 -4
-3 3 3 2 2 2 1 1 1 0 0 0 0 0 -1 -1 -1 -2 -2 -2 -3 -3 -3
-2 5 4 4 3 3 2 2 1 1 0 0 0 -1 -1 -2 -2 -3 -3 -4 -4 -5 -2
-1 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -1
0 0
1 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 1
2 -5 -4 -4 -3 -3 -2 -2 -1 -1 0 0 0 1 1 2 2 3 3 4 4 5 2
3 -3 -3 -2 -2 -2 -1 -1 -1 0 0 0 0 0 1 1 1 2 2 2 3 3 3
4 -2 -2 -2 -1 -1 -1 -1 0 0 0 0 0 0 0 1 1 1 1 2 2 2 4
5 -2 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 5
6 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 6
7 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 7
8 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 8
9 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 9
10 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
Java Остаток: col % row == col — row * ( col / row )
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
-10 0 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 -10
-9 -1 0 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 0 1 -9
-8 -2 -1 0 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 0 1 2 -8
-7 -3 -2 -1 0 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 0 1 2 3 -7
-6 -4 -3 -2 -1 0 -5 -4 -3 -2 -1 0 1 2 3 4 5 0 1 2 3 4 -6
-5 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 1 2 3 4 0 1 2 3 4 0 -5
-4 -2 -1 0 -3 -2 -1 0 -3 -2 -1 0 1 2 3 0 1 2 3 0 1 2 -4
-3 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 1 2 0 1 2 0 1 2 0 1 -3
-2 0 -1 0 -1 0 -1 0 -1 0 -1 0 1 0 1 0 1 0 1 0 1 0 -2
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
2 0 -1 0 -1 0 -1 0 -1 0 -1 0 1 0 1 0 1 0 1 0 1 0 2
3 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 1 2 0 1 2 0 1 2 0 1 3
4 -2 -1 0 -3 -2 -1 0 -3 -2 -1 0 1 2 3 0 1 2 3 0 1 2 4
5 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 1 2 3 4 0 1 2 3 4 0 5
6 -4 -3 -2 -1 0 -5 -4 -3 -2 -1 0 1 2 3 4 5 0 1 2 3 4 6
7 -3 -2 -1 0 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 0 1 2 3 7
8 -2 -1 0 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 0 1 2 8
9 -1 0 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 0 1 9
10 0 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 0 10
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
Математический модуль: col mod row == (col % row + row) % строка
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
-10 0 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 -10
-9 -1 0 -8 -7 -6 -5 -4 -3 -2 -1 0 -8 -7 -6 -5 -4 -3 -2 -1 0 -8 -9
-8 -2 -1 0 -7 -6 -5 -4 -3 -2 -1 0 -7 -6 -5 -4 -3 -2 -1 0 -7 -6 -8
-7 -3 -2 -1 0 -6 -5 -4 -3 -2 -1 0 -6 -5 -4 -3 -2 -1 0 -6 -5 -4 -7
-6 -4 -3 -2 -1 0 -5 -4 -3 -2 -1 0 -5 -4 -3 -2 -1 0 -5 -4 -3 -2 -6
-5 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 -4 -3 -2 -1 0 -5
-4 -2 -1 0 -3 -2 -1 0 -3 -2 -1 0 -3 -2 -1 0 -3 -2 -1 0 -3 -2 -4
-3 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 -2 -1 0 -2 -3
-2 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -2
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
2 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 2
3 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 3
4 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 4
5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 5
6 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 6
7 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 7
8 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 8
9 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 9
10 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 10
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

Получение цифр числа, любая система счисления

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

Чет или нечет?

Вы можете сказать, является ли int четный или нечетный, глядя на его остаток, модуль 2:
 логический даже = x % 2 == 0;
логический нечетный = х % 2 != 0; 
Обратите внимание, что аналогичный код, который вы часто видите, будет работать с , а не с . отрицательные числа:
 логическое значение даже = x % 2 == 0;
логический нечетный = x% 2 == 1; // не работает для отрицательных x 
Существует более быстрый способ вычислить их, маскируя младший бит:
 логическое значение даже = ( x & 1 ) == 0;
логический нечетный = ( x & 1 ) != 0; 
Код может быть еще быстрее, если вы хотите получить число 0 или 1 в качестве результата, скажем, для индексирование массива вместо логического значения:
 целое нечетное = х & 1; 

Каждый n-й

Допустим, вы хотели что-то сделать каждый четвертый линия, напр. вставить пробел, цветную полосу, галочку…

Другое использование

Модуль можно использовать при вычислении следующего свободного круга. буфер с беличьей клеткой.
 int nextbuf = (thisbuf + 1) % запаса; 
Модуль можно использовать для преобразования смещения в файл в номер фрагмента и смещение. внутри этого куска.
 int recordNumber = fileOffset / blockSize;
int recordOffset = fileOffset % blockSize; 

Плавающая точка %

% также определен для работы с плавающие и двойные операнды, хотя это использование довольно редко.

Результат операции остатка с плавающей запятой, вычисленный оператором %, не совпадает с результатом, полученным остатком операция, определяемая плавающим кодом IEEE 754. стандарт точки. IEEE (Институт инженеров по электротехнике и электронике) 754 остатка операция вычисляет остаток от деления округления, а не деления усечения. % в операциях с плавающей запятой ведет себя аналогично оператор целочисленного остатка; это можно сравнить с библиотечной функцией C мод. IEEE 754 остаточная операция может быть вычислена библиотечной подпрограммой Math.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *