I am trying to understand the logic behind the printf numbers in the code below. Can someone explain how the valuables change? What symbol is executed first (|| , &&, != and so on)? In which direction is it executed?
#include <stdio.h>
static float w = 3.9;
short
f (short a, short *b)
{
  a++;
  (*b)++;
  w++;
  printf ("13: %d %d %4.2f\n", a, *b, w);
  return a - *b;
}
int
main ()
{
  short x, y, z, arr[] = { 4, 8, 0, 6 }, *p = arr;
  char m[] = "dcrfvtgb", *pc;
  y = 2;
  z = 3;
  x = (++y != z);
  printf ("1: %d %d %d\n", x, y, z);
  x = y = 6;
  x *= (y = 5);
  printf ("2: %d %d\n", x, y);
  x = 0;
  y = 2;
  z = 7;
  printf ("3: %d %d %d %d\n", !x || y && !z, x, y, z);
  x = 5;
  y = 3;
  printf ("4: %d %d %d\n", x, y, x < y ? x : y);
  y = 0;
  if (y)
    x = 7;
  else
    x = 5;
  printf ("5: %d %d\n", x, y);
  y = 8;
  if (z = (y++ > 8))
    x = 9;
  else
    x = 0;
  printf ("6: %d %d %d\n", x, y, z);
  x = y = 5;
  while (y++ < 5)
    x += y;
  printf ("7: %d %d\n", x, y);
  for (x = y = 5; y < 7; x = y++)
    printf ("8:%d %d\n", x, y);
  for (x = 2, y = 5; y >= 1; x++, y /= 3);
  printf ("9: %d %d\n", x, y);
  printf ("10: %d %d\n", p[2], *(arr + 1));
  x = y = 3;
  z = f (x, &y);
  printf ("11:%d %d %d %4.2f\n", x, y, z, w);
  for (x = y = z = 10; z-- > 9; x *= y);
  printf ("12: %d %d %d\n", x, y, z);
  for (pc = m; *pc; pc++)
    (*pc)--;
  printf ("14: %s %c\n", m + 2, *(m + 1));
  return 0;
}
 
     
    