位结构面试题
2006-2-27 星期一(Monday) 晴
- #include <stdio.h>
- union {
- struct {
- unsigned short s1:3;
- unsigned short s2:3;
- unsigned short s3:3;
- }x;
- char c;
- }v;
- int main()
- {
- v.c = 100;
- printf("%d\n", v.x.s3);
- 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。
不知道在其他的体系结构是什么结果。
转载于:https://blog.51cto.com/freshpassport/577698