gpt4 book ai didi

c - char 的按位运算给出 32 位结果

转载 作者:行者123 更新时间:2023-12-01 13:56:52 25 4
gpt4 key购买 nike

我一直在用 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;
}

最佳答案

o 作为参数传递给 printf() 会导致自动转换为 int,这在您的系统上显然是 32 位的.自动转换使用符号扩展,因此如果设置了 o 中的第 7 位,转换结果中的第 8-31 位将被设置,这将解释您所看到的内容。

您可以使用 unsigned char 而不是 char 来避免这种情况。或者将 o & 0xff 传递给 printf()

关于c - char 的按位运算给出 32 位结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com