[Solved] A simple C program output is not as expected


    signed char c;
    unsigned char b;
    b = 0xf4;

    /* ... */

    c = (signed)b;

The value of b is 0xf4 (244) but c type (signed char) can only hold values between -128 and 127 (in your implementation). So when 244 is assigned to c it is first converted to signed char and C says this integer conversion is implementation defined. gcc as most implementations
just wraps around modulo 256 and that’s why the value of c is -12.

Here is gcc documentation:

http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html

“For conversion to a type of width N, the value is reduced modulo 2^N to be within range of the type”

2

solved A simple C program output is not as expected