c - 为什么结构成员似乎有一个溢出值?

标签 c struct structure padding bit

在下面的代码中,我得到 A = -1 作为输出。我想,这是因为我溢出了 3 位的 A 成员。 在这方面我有两个问题:

  1. 编译器难道不应该为成员 A 考虑最后 3 位而忽略其余位吗?为什么值为负?
  2. 如果考虑了所有位,为什么我得到 B = 0 的值作为输出?

我原以为 A 的值为 7,但我显然误会了什么。请帮忙。

#include  <stdio.h>
typedef struct
{
  char A: 3;
  char B: 3;
  char C: 3;
}my_struct;
my_struct new_object = {0};

void main(void)
{
  new_object. A = 63;
  printf("A = %d\n", new_object.A);
  printf("B = %d\n", new_object.B);
}

最佳答案

I was expecting A would be having a value of 7

好的。 7在二进制中是111。但是你有一个 signed 字符(显然,因为你告诉我们它的结果是 -1)。所以你需要做:

typedef struct
{
  unsigned char A: 3;
  unsigned char B: 3;
  unsigned char C: 3;
}my_struct;

关于c - 为什么结构成员似乎有一个溢出值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377934/

相关文章:

在 C 中将命令行参数转换为小数

c++ - &a[x] 在 C 中返回什么类型的值

c - "Access violation writing location"链表错误

C - 创建和使用结构数组?错误 : expected identifier or '(' before '[' token

c - 具有可变成员大小的结构

c - 比较c中的两个char指针值时strcmp返回true

.net - 为什么 F# inline 会导致 11 倍的性能提升

c# - 如何在 C# 中在运行时转换泛型值?

c - 为结构指针分配内存

C:链表词频-排序