manik said:
Assuming int is 32 bits and char is 8 bits on my machine
Say I have the following piece of code
int a = 0x12345678;
char b;
b=(char)a;
b = a;
is simpler and has the same effect. Casts are for cases where type
conversion do not otherwise take place.
What would be the value of b?
Even the value of a in doubt! Let's assume that the initialisation of
a does not overflow...
Would the value of b depend on the endianness of the machine?
No, not in any usual sense of the word.[1]
If char is unsigned the value is guaranteed by the standard (it is the
value of a mod UCHAR_MAX + 1) but the unsigned-ness of char is not
guaranteed, so the code is not portable. If char is signed, and the
value of a does not fit (it might!) then the result is implementation
defined.
[1] I say this because (since the result may be implementation-defined)
the implementation is permitted to cause the value of b to depend on
the (settable) endian-ness of the machine, but that is not what one
usually means by the phrase.