C で int を char に代入するとどうなりますか? 左側の余分なビットを常に無視しますか?
例 (4 バイト int):
unsigned char c = 0;
unsigned int i = 500;
c = i; // c is 244
c = i << 24 >> 24; //c is 244
i = i << 24 >> 24; //i is 244
バイナリでは、500
is111110100
および244
is11110100
です。
C で int を char に代入するとどうなりますか? 左側の余分なビットを常に無視しますか?
例 (4 バイト int):
unsigned char c = 0;
unsigned int i = 500;
c = i; // c is 244
c = i << 24 >> 24; //c is 244
i = i << 24 >> 24; //i is 244
バイナリでは、500
is111110100
および244
is11110100
です。
通常、これはまさに起こることです。ISO/IEC 9899:2011 規格のセクション 6.3.1.3 では、この場合に何が起こるかを規定しています。
6.3.1.3 符号付きおよび符号なし整数
60)規則は、与えられたタイプの式の値ではなく、数学的な値の算術演算を記述します。
あなたのケースは上記の項目 2 に該当します (あなたのキャラクターは署名なしと宣言されているため)。典型的なコンピューター演算では、結果はあなたが説明したとおりになります。