Question: > 
> **Possible Duplicate:**  
> 
> [Negative ASCII value](https://stackoverflow.com/questions/4690415/negative-ascii-value) 
> 
> 
> 

```
int main() {
    char b = 8-'3';
    printf("%c\n",b);

    return 0;
}

```

I run this program and I get a sign which looks like a question mark (?).

My question to you is why is it prints that and not printing nothing, beacause as far as I know the value of b by the ASCII table is minus 43 which is not exist.

by the way, when I compile this code: 

```
int main() {
    char b = -16;
    printf("%c\n",b);

    return 0; 
}

```

I get nothing.

Answer: 
There is no such thing as a "negative ASCII" value. ASCII defines character and control codes for values from 0 to 127.

Most systems don't use plain ASCII. They use some other character set. Almost all other characters sets match ASCII for the values from 0 to 127, but they define additional characters and control codes for higher values.

In some C and C++ implementations `char` corresponds to a signed char that can take values from -127 to +127 (and in most cases from -128 to +127). In other implementations `char` is an unsigned value from 0 to 255.

If you have a signed `char` with a negative value and try to print it, the library will treat that as an `unsigned char` (e.g., -1 becomes 255), and it will print whichever character in the platform's character set corresponds to that value. If there is no character assigned to a particular value, the library may choose to display some default placeholder character, like a question mark or a box.
characters are internally interpreted as "unsigned" while printing. Hence, it will be 255 - 16 = 239th character. The ascii value with the order 239 is printed on the screen console. Similarly -43 is order 212.