gpt4 book ai didi

你能解释一下 int 值是如何存储在 C 语言的位域中的吗?

转载 作者:太空狗 更新时间:2023-10-29 16:11:34 25 4
gpt4 key购买 nike

#include <stdio.h>

struct marks{
int p:4;
int c:3;
unsigned int m:2;
};

void main()
{
struct marks s = {-15, 5, 3};
printf("%d %d %d\n", s.p, s.c, s.m);
}

输出:

1 -3 3

为什么第一个值打印为1,第二个值打印为-3?

最佳答案

对于 p,您分配了 4 位。因此,p 的有效值范围是 1000B - 0111B 或 -8 到 7。-15 所需的最少位数是 5,二进制为 10001B。由于您只分配了 4 位,因此符号位丢失,您只剩下 1。

对于 c,您正在分配有效范围为 100B - 011B 或 -4 到 3 的 3 位。由于 5 是 101B 且超出有效范围,因此显示为 -3。

关于你能解释一下 int 值是如何存储在 C 语言的位域中的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103079/

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