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: 
That's because `-16` is the same as hex `0xf0` which is the same as `240`. In my character set (ISO 8859-1) that character is `LATIN SMALL LETTER ETH` or `'ð'`.
The `%c` formatting will always print a character, so presumably it just takes the bits of your `char` and treats it as an unsigned value, which ends up being something with the highest bit set. Your terminal may display these characters as blank or as placeholders with question marks, but mine shows Õ and ð…

If you want to print nothing when the value is negative, you need to check for it (and use either a larger data type, such as `int` so that you can fit the non-char values along with all possible chars, or `signed char` if you wish to be sure that you are getting a signed type; a plain `char` may be either signed or unsigned).