我一直在用 C 编写一个程序,将 char 的前 4 位移到末尾,将后 4 位移到开头。对于大多数值,它正常工作,以及反向操作,但对于某些值,如 8、x、y、z,它给出一个 32 位值作为结果。通过打印变量的十六进制值检查的值。谁能解释为什么会这样?
#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;
}