Есть ли способ выразить МАТЕМАТИЧЕСКИЙ модуль int в C? - PullRequest
0 голосов
/ 11 ноября 2018

Я имею в виду это ||не это %.Как, скажем, у меня есть два целых числа x и y и целое число z.Теперь

z = x - y

Есть ли способ выразить | z |так что если z положительно, оно остается положительным, а если z отрицательно, оно переходит в противоположность?Я не хочу выражать это, если, просто математическим уравнением, символом или чем-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Если нет функции abs (), второй способ (без ветвления):

  int num;

  printf("Enter num: ");
  scanf("%d", &num);
  printf("Abs=%d\n", num*(1+(num<0)*-2));

РЕДАКТИРОВАТЬ после комментария от StoryTeller:

Трюк работает, потому что условный тест, такой как «<», возвращает 0 (для false) или 1 (для true). Мы можем развернуть это возвращенное число в более сложном выражении. В этом случае нам нужно выражение, которое возвращает 1 или -1. Если число num НЕ меньше 0, то есть не является отрицательным, «num <0» возвращает 0, а выражение дает 1 + (- 2 * 0) = 1. Число num возвращается без изменений. Если num меньше 0, то есть отрицательно, выражение возвращает -1: 1 + (-2 * TRUE), где значение TRUE равно 1. </p>

Имея теперь 1 или -1 в зависимости от того, что число равно num, простое умножение при необходимости инвертирует знак числа.

0 голосов
/ 11 ноября 2018

Требуется функция abs(), предусмотренная в заголовке math.h.

Пример:

z = abs(x - y);
...