You have to think in terms of ASCII values. When you perform x = x - x, you're saying x = 0 (the ascii code for whatever character I type in for x minus itself is always 0)
Then look up 0 in the ASCII table, and you'll see null. So it will print null (looks like a space) and a 1.
When you perform x -= 3;, you're taking the numeric ascii code for the character you typed in, and subtracting 3. If you look at the ASCII table, you'll notice that 3 characters before the character 1 is * and three characters before 2 is /. This explains the results you are getting.
If you intend to convert the characters into the numeric values it represents, there is a bunch of ways to do this, you can subtract '0' or use the atoi function after converting the char to a string in C.
-'0' method
int numeric = x - '0';
atoi method requires a conversion to string.
char str[2] = "\0";
str[0] = x;
int numeric = atoi(str);
Both these will not make sense if you typed in a non-numeric character, e.g. aa