目前我正在研究c并面临关于结构中已签名的int的混淆,这里我举了一个例子:
#include <stdio.h>
#include <string.h>
struct {
signed int age : 4;
} Age;
int main( ) {
Age.age = -8;
printf("Age.age : %d\n", Age.age );
return 0;
}
这里,我已经描述了int在存储值时占用的位的大小。我在这里为年龄分配值-8。因此它将存储值为1000,如8和-8,它应存储为11000,其中第1位称为符号位。因此,如果int age必须存储-8,它必须有5位,但在编译给定示例时,它不会给出错误并显示输出。
请帮我处理我的问题。
答案 0 :(得分:2)
可能在您的系统上使用2's complement表示存储整数。
在2的补码中,4位位域可以保持-8
到+7
的范围。位表示1000
将表示-8
,并且无法存储+8
。
分配超出范围的值(例如在这种情况下为+8
)会导致实现定义的行为。