gpt4 book ai didi

c - C中的结构细节

转载 作者:太空狗 更新时间:2023-10-29 15:20:21 26 4
gpt4 key购买 nike

我是 C 的新手。我在 google 上搜索了很多关于下面代码的输出。但没有太多帮助。

代码如下:

struct str
{
int i: 1;
int j: 2;
int k: 3;
int l: 4;
};

struct str s;

s.i = 1;
s.j = 2;
s.k = 5;
s.l = 10;

printf(" i: %d \n j: %d \n k: %d \n l: %d \n", s.i, s.j, s.k, s.l);
Output:
i: -1
j: -2
k: -3
l: -6

谁能解释为什么输出如此?谢谢。

最佳答案

因为您的字段不是unsigned,所以它们是有符号的。

如果你有一个带符号的字段,它的最高有效位表示负数。这意味着负值总是比正值多一个 - 至少,在您使用的实现中,它似乎使用二进制补码作为负数。

如果将 10 放入 4 位的位域中,则得到 1010,它是负数 (-6)。

如果将 5 放入 3 位的位域中,则得到 101,它是负数 (-3)。

如果将 2 放入 2 位的位域中,则得到 10,它是负数 (-2)。

如果你把一个 1 放在一个 1 位的位域中,你就有了 1,它是负数 (-1)。

struct str
{
unsigned int i: 1;
unsigned int j: 2;
unsigned int k: 3;
unsigned int l: 4;
};

你应该能够实现你想要的。

关于c - C中的结构细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071669/

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