位结构面试题

2006-2-27 星期一(Monday) 晴  


 
  
  1. #include <stdio.h> 
  2.  
  3. union { 
  4.     struct { 
  5.         unsigned short s1:3; 
  6.         unsigned short s2:3; 
  7.         unsigned short s3:3; 
  8.     }x; 
  9.     char c; 
  10. }v; 
  11.  
  12. int main() 
  13.     v.c = 100; 
  14.     printf("%d\n", v.x.s3); 
  15.     return 0; 

A:4 B:0 C:3 D:6
答案是A

但我在TURBO C中运行答案是1
请问 是因为TURBO C 版本在原因而运行结果不一样吗?

---------------

我在ubuntu 10.10 32位系统,gcc编译,测试结果是1,分析认为结构x中的三个3bit位按照下面的方式分配存储:

upper | s3 | s2 | s1

字节成员c应该是在union的低地址,因此union数据赋值后变位:

upper | s3 | s2 | s1

                                c

                 1|100| 100

s3的值为1。

不知道在其他的体系结构是什么结果。