一道C/C++面试题

tanglei619 2011-11-18 03:15:37
#include <iostream>

using namespace std;

int main()
{
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;

unsigned char c;
} v;

v.c = 100;

printf("%d\n",v.x.s3);

return 0;
}

结果为3,何解?
...全文
237 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanglei619 2011-11-21
  • 打赏
  • 举报
回复
恩 3Q!~
softwarestudying 2011-11-18
  • 打赏
  • 举报
回复
v是联合体(共用体)变量,共有两个元素x和c,都需要一个字节,它们分配于同一个地址。而x是结构体变量,共有三个元素s1、s2、s3,分别占2位、3位、3位。分配内存时低位在前,最位在后。当有v.c=100(其二进制为01100100)时,各变量的关系及内存存储情况见图所示。
其中x的成员s3为二进制的011,即十进制的3,所以输出结果为3。
Zou_prince 2011-11-18
  • 打赏
  • 举报
回复
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;

加入x的二进制为 XXXXzzzyyyxx
s1占最后2位置:xx;(2)
s2占最后5-2位置:yyy;(3)
s1占最后8-5位置:zzz;(3,如果不够,有多少位算多少位)

c = 100
二进制为:1100100
s3=11; s2=001; s1=00;
s3=3; s2=1; s1=0;

假如
c = 200
二进制为:11001000
s3=110; s2=010; s1=00;
s3=6; s2=2; s1=0;

假如
c = 300
二进制为:100101100
s3=001; s2=011; s1=00;
s3=1; s2=3; s1=0;

现在能理解么

dijisaiyaren 2011-11-18
  • 打赏
  • 举报
回复
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;


本人初学者
有个东西不懂啊,这个结构体里面定义的是些啥东西?
unsigned char s1:2;
luciferisnotsatan 2011-11-18
  • 打赏
  • 举报
回复
位域
大小端

tanglei619 2011-11-18
  • 打赏
  • 举报
回复
谢谢帮助,我在想想哈!~
bdmh 2011-11-18
  • 打赏
  • 举报
回复
x和v公用一块内存,而且要看大小端,一般的如下
100二进制是1100100,那么s3是11,s2是001,s1是00
eyodo8 2011-11-18
  • 打赏
  • 举报
回复
这是位结构,100的二进制为01100100,s3是011,打印出来自然是3
本压缩包文件集锦了嵌入式C/C++开发编程技巧,高效编程技术探索,C/C++语言相关技术问题的深层探索,并且对嵌入式C/C++程序员应聘常见面试题进行了深入剖析,对嵌入式C/C++开发者编程修炼,提升自身的相关能力具有很要的作用。 文档包含如下内容: struct 深层探索. C++中extern "C"含义深层探索. C 语言高效编程的几招 想成为嵌入式程序员应知道的 0x10 个基本问题 C 语言嵌入式系统编程修炼之一:背景篇 C 语言嵌入式系统编程修炼之二:软件架构篇 C 语言嵌入式系统编程修炼之三:内存操作 C 语言嵌入式系统编程修炼之四:屏幕操作 C 语言嵌入式系统编程修炼之五:键盘操作 C 语言嵌入式系统编程修炼之六:性能优化 C/C++语言 void 及void 指针深层探索 C/C++语言可变参数表深层探索 C/C++数组名与指针区别深层探索 C/C++程序员应聘常见面试题深入剖析(1) C/C++程序员应聘常见面试题深入剖析(2) 一道著名外企面试题的抽丝剥茧 C/C++结构体的一个高级特性――指定成员的位数 C/C++中的近指令、远指针和巨指针 从两道经典试题谈 C/C++中联合体(union)的使用. 基于 ARM 的嵌入式Linux 移植真实体验 基于 ARM 的嵌入式Linux 移植真实体验(1)――基本概念 基于 ARM 的嵌入式Linux 移植真实体验(2)――BootLoader 基于 ARM 的嵌入式Linux 移植真实体验(3)――操作系统 基于 ARM 的嵌入式Linux 移植真实体验(4)――设备驱动 基于 ARM 的嵌入式Linux 移植真实体验(5)――应用实例 深入浅出 Linux 设备驱动编程 1.Linux 内核模块 2.字符设备驱动程序 3.设备驱动中的并发控制 4.设备的阻塞与非阻塞操作

64,665

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧