#include<stdio.h>
main()
{
struct value
{
int bit1 : 1;
int bit2 : 4;
int bit3 : 4;
}bit={1, 2, 2};
printf("%d %d %d\n",bit.bit1,bit.bit2,bit.bit3);
}
这段代码的输出是“-1 2 2” 请澄清此输出背后的逻辑。 bit.bit2 和 bit.bit3 的值始终与分配给它的值相同,但 bit.bit1 会随着不同的整数值而变化。为什么?
最佳答案
您应该使用unsigned int
。如果使用有符号值,则最高位定义数字是负数还是正数。如果只有一位,即 1,那么当设置最高位时,它会被解释为负数。
如果将其他值设置为 15,您也会得到负输出。
您可以通过在 printf 命令中使用 %u
来修改输出,但在分配它并将其与其他值进行比较时,您仍然可能会产生不需要的效果。
关于c - 使用 C 中的结构的不可预测的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17510695/