位段操作中,为什么同样的位段,但是却是不同的方式,不同的值?

struct A //位段类型
{
    int a : 10;//最高位为512;
    int b : 5;//最高位为32;
};
int main()
{
    struct A s;
    s = { 0 };
    s.a = 513;//0010 0000 0001
    s.b = 38;//10 0110
    printf("%d\n",s.a);
    printf("%d\n", s.b);
}

为什么 s.as.b 同样最高位都是 1,但 s.a 为取其补码,变成负数,但 s.b 却是正数 6

阅读 1.5k
1 个回答

a: 10 这个能表示的最大值是 1023(无符号)
b: 5 这个能表示的最大值是 37(无符号)
都按位运算了,就没有符号位的概念了,你给个 513 和 38 想表达什么?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题