一道面试题C

bobya2003 2006-10-16 01:09:15
struct bit
{
int a:2;
int b:4;
int c:2;
}
struct bit s ;
char *c = (char*)&s;
c = 0x99;
printf("a=%d b= %d c= %d "s.a,s.b,s.c);
问输出什么?
帮忙看看
...全文
284 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobya2003 2006-10-16
  • 打赏
  • 举报
回复
基本了解出题意图了,谢谢
benjiam 2006-10-16
  • 打赏
  • 举报
回复
为什么是从尾开始分呢?

struct bit
{
int a:3
int b:4;
int c:1
}

1,0011,001

和我设想的不一样
KenYuan2016 2006-10-16
  • 打赏
  • 举报
回复
修改:
char* c = (char*)&s;
*c=(char)0x99;

0X99 const int 不能直接给 char *c。 结果是 a=1 b=6 c=-2.
如果改为 unsigned char
结果为:a=1 b=6 c=-2

我认为这和机器机型有关,单片机和X86执行的结果可能不一样, 如果有区别,高手指教一下。
KenYuan2016 2006-10-16
  • 打赏
  • 举报
回复
面试题最喜欢搞这些无聊的东西:
struct bit
{
int a:2;
int b:4;
int c:2;
}
struct bit s ;
char *c = (char*)&s;
c = 0x99;
printf("a=%d b= %d c= %d "s.a,s.b,s.c);
位域:说明
1.一个位域必须存放在同一个字节中,不允许跨字节存放,如果不够必须从下一个单元开始存放。
2。位域不允许大于8字节,如果大于跟1。矛盾 跨字节存放时不允许的。
3.位域可以没有位域名,比如上面可以没有abc, int :2. 这样一般都是为了调整位置写的。

上题中整个s占一个字节 8位。
0X99=10 0110 01 结果是 10, 0110, 01
blue_zyb 2006-10-16
  • 打赏
  • 举报
回复
基本上同意dhy311(好好学习,天天向上)
Jokar 2006-10-16
  • 打赏
  • 举报
回复
是陷阱题~鉴定完毕~
dhy311 2006-10-16
  • 打赏
  • 举报
回复
benjiam(今晚打老虎) (说得是对的,的确是有大小头问题,intel&amd cpu (小头cpu)输出是 a= 1, b=6, c= -2; 大头的输出是 :a = -2, b= 6 c = 1
飞哥 2006-10-16
  • 打赏
  • 举报
回复
呵呵,考改错?

程序有问题!!
想想就知道了

把一个值付给地址就不说了
连printf也有问题
寒!
dhy311 2006-10-16
  • 打赏
  • 举报
回复
benjiam(今晚打老虎) 单字节跟cpu大小端没有关系
dhy311 2006-10-16
  • 打赏
  • 举报
回复
输出是:a= 1, b=6, c= -2;
benjiam 2006-10-16
  • 打赏
  • 举报
回复
至少要问 是多少位的cpu 大小端的机器 才知道结果
dhy311 2006-10-16
  • 打赏
  • 举报
回复
struct bit s ;
char *c = (char*)&s;
//c = 0x99;
//应该是
*c = (char) 0x99;
0x99;2进制是 10,0110,01,所以 a是01,b是0110,c是10
lddLinan 2006-10-16
  • 打赏
  • 举报
回复
些个程序不就知道了?
healer_kx 2006-10-16
  • 打赏
  • 举报
回复
面试这个的单位有毛病。

64,654

社区成员

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

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