Не получается до конца правильно проанализировать код, который дал мне учитель

Учитель дал мне такой код:

#include <stdio.h>
unsigned int
pirma (unsigned int a, unsigned int b)
{
  return a * b + b % 2;
}

unsigned int
antra (unsigned int a)
{
  return a / 5 + (a << 1);
}

int
main ()
{
  unsigned int a = 124;
  unsigned int b = 292;
  unsigned int c = 84;
  a = antra (c);
  b = pirma (a, b);
  printf ("%d %d %d", a, b, c);

  return 0;
}

Ответ в консоли выдает такой: 184 53728 84

Но если считать логически то получается: 272 79424 84

И методом проб я заметил что если в строке

a = antra (c);

(c) заменить на (a) то уже как раз получается так как если считать просто логически (читая код). Скорее всего я просто что-то упускаю. Так вот, не могли бы вы разложить по полочкам весь пример, почему в итоге получается:

184 53728 84


Ответы (1 шт):

Автор решения: timur
a = antra(c);
  1. c / 5 = 16
  2. c << 1 = 168
  3. c / 5 + (c << 1) = 184

В результате a = 184

b = pirma(a, b);
  1. a * b = 53 728
  2. b % 2 = 0
  3. a * b + b % 2 = 53 728

В результате b = 53 728

→ Ссылка