char の最初の 4 ビットを末尾に移動し、最後の 4 ビットを先頭に移動するプログラムを C で作成しています。ほとんどの値では、逆の操作と同様に正常に機能しますが、8、x、y、z などの一部の値では、結果として 32 ビット値が得られます。変数の 16 進値を出力してチェックされる値。なぜこれが起こっているのか誰か説明できますか?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char o, f,a=15;
scanf("%c",&o);
printf("o= %d\n",o);
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
return 0;
}