我一直在用 C 编写一个程序,将字符的前 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;
}
Passing o
作为一个论点printf()
结果自动转换为int
,这在您的系统上显然是 32 位的。自动转换使用符号扩展,因此如果位 7o
设置后,转换结果中的第 8-31 位将被设置,这将解释您所看到的内容。
你可以使用unsigned char
代替char
以避免这种情况。或通过o & 0xff
to printf()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)