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: 
Here's the behavior as specified in the [C 2011 standard](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)

> 
> ### 7.21.6.1 The fprintf function
> 
> 
> ...  
> 
> 8 The conversion speciﬁers and their meanings are:  
> 
> ...  
> 
> `c` If no `l` length modiﬁer is present, the `int` argument is converted to an
> `unsigned char`, and the resulting character is written.  
>   
> 
> If an `l` length modiﬁer is present, the `wint_t` argument is converted as if by
> an `ls` conversion speciﬁcation with no precision and an argument that points
> to the initial element of a two-element array of `wchar_t`, the ﬁrst element
> containing the `wint_t` argument to the `lc` conversion speciﬁcation and the
> second a null wide character.
> 

That -43 is being converted to an unsigned value (213), so it's printing an extended ASCII character.
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.