gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:30:10 26 4
gpt4 key购买 nike

在下面的代码中,我得到 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/

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