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

结构体位的疑问
  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输出