#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?
答案 0 :(得分:5)
对于p
,您分配4位。因此,p
的有效值范围是1000B - 0111B或-8到7. -15所需的最少位数为5,二进制位数为10001B。由于您只分配了4位,因此符号位丢失,您将保留1。
对于c
,您正在分配3位,其有效范围为100B - 011B或-4到3.由于5为101B且超出有效范围,因此显示为-3。
答案 1 :(得分:0)
二进制的值5是101.由于所讨论的字段是3位有符号的,并且设置了最高有效位,因此该值为负。在二进制补码表示中,它是-3。