c - 使用 C 中的结构的不可预测的输出

标签 c struct bit-fields

#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/

相关文章:

c - 我怎样才能让 GCC 将这个位移指令优化为一个 Action ?

c++ - 如何通过引用传递位字段

c - 这段代码(在描述中)如何工作?

c - 为什么 *(&identifier)=value 在 C 中有效?

c - 在 C 中寻址嵌套结构的值

c - 在c中用struct提取位域

c++ - 在 Windows 7 上编译和运行 GTK+ 应用程序

c++ - int &a = b 在 C 4.8.1 中使 'a' 成为指向 'b' 的指针,但在 C 中却没有,为什么? (按引用调用)

c - 定义未定义数组并从 c 中的结构返回时出现段错误

c - 位字段是否对应于累加器中的寄存器?