日期:2014-05-16  浏览次数:20778 次

结构体位的疑问
1 #include<stdio.h>
  2 struct _A{
  3 int a:2;
  4 int b:2;
  5 };
  6 int main()
  7 {
  8 struct _A AA;
  9 AA.a=3;
 10 AA.b=2;
 11 printf(" %d %d ",AA.a,AA.b);
 12 
 13 }

请问输出为何是-1 -2
3 是0011
2 是0010

------解决方案--------------------
看编译出来的汇编对位是怎么处理的。

2bit signed
所以
11,最高位1表示负数,即-1
10,最高位1表示负数,即-2(同char 0x80表示-128一样)

2bit作为参数传递时,后被提升为int,,即-1,-2输出