Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASCII TABLE - negative value [duplicate]

Tags:

c

char

ascii

Possible Duplicate:
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.

like image 408
wantToLearn Avatar asked Feb 19 '23 15:02

wantToLearn


1 Answers

Here's the behavior as specified in the C 2011 standard

7.21.6.1 The fprintf function

...
8 The conversion specifiers and their meanings are:
...
c If no l length modifier is present, the int argument is converted to an unsigned char, and the resulting character is written.

If an l length modifier is present, the wint_t argument is converted as if by an ls conversion specification with no precision and an argument that points to the initial element of a two-element array of wchar_t, the first element containing the wint_t argument to the lc conversion specification 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.

like image 123
John Bode Avatar answered Feb 28 '23 08:02

John Bode