导航
  • 全部
...

笔试题,大家进来看下!!!

zlaxr8888 2009-10-25 12:25:59
1.实现函数 void set_bits(int *p,int bits),该函数作用是将bits中的第2,3位赋给p指向的变量第4,5位(最低位为0位)

...全文
给本帖投票
406 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_S_D_N 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wisdom311 的回复:]
我感觉应先将*p 4,5位清0;
*p &= 0xffffffcf;
*p |= ((bits & 0x00000002) < < 2);
*p |= ((bits & 0x00000004) < < 2);
[/Quote]

赞同!
*p &= 0xffffffcf ;
bit &= 0xfffffff3 ;
*p |= (bit << 2) ;
juggernaut620 2009-11-11
  • 打赏
  • 举报
回复
我感觉应先将*p 4,5位清0;
*p &= 0xffffffcf;
*p |= ((bits & 0x00000002) < < 2);
*p |= ((bits & 0x00000004) < < 2);
yinfuyong 2009-11-11
  • 打赏
  • 举报
回复
好难啊
juggernaut620 2009-11-11
  • 打赏
  • 举报
回复
对上面说的, 我怎么感觉不对呢~人家题目说 取bits 2,3位 给 *p4,5位赋值。
而你们做的都是 取到bits2,3位后,或上*p的4,5位。
假如*p的 4,5位是00 那怎么或都可以,要是 4,5位有 1 而bits 是0 这么或上 结构就不对了~

不知道是我知识浅薄,还是各位大虾的想法理解错误~
lalala1977 2009-11-11
  • 打赏
  • 举报
回复
学习中
fly2sky 2009-10-26
  • 打赏
  • 举报
回复
我为什么感觉上边答案应该是这样子呢~
*p |= ((bits & 0x00000002)<< 2);
*p |= ((bits & 0x00000004)<< 2);
fly2sky 2009-10-26
  • 打赏
  • 举报
回复
int a = 6;
bits = bits&a;
bits=bits<<2;
*p= *p|bits;
cout<<*p<<endl;
这种效率明显没有楼上的高,不过我试了一下,也能实现,因为6的二进制数为 0110,6和bits与运算则得到了bits的2,3位,然后bits左移2位 就变成了4,5位,然后让bits和目标进行或运算即可得到结果。~~
此法比较繁琐,只是提供个思路,谢谢拍砖
zlaxr8888 2009-10-25
  • 打赏
  • 举报
回复
自己顶下
zlaxr8888 2009-10-25
  • 打赏
  • 举报
回复
ding
mstlq 2009-10-25
  • 打赏
  • 举报
回复
写一个set0,写一个set1……
然后调……
JoeBlackzqq 2009-10-25
  • 打赏
  • 举报
回复
异或似乎不等于替换吧,楼主题目的意思是把bits中第2,3位直接赋值给*P中的第4,5位
die_angle 2009-10-25
  • 打赏
  • 举报
回复
发错了:

  1. *p |= (bits & 0x00000002 << 1);
  2. *p |= (bits & 0x00000040 << 2);
die_angle 2009-10-25
  • 打赏
  • 举报
回复

  1. *p |= (bits & 0x00000002 << 1);
  2. *p |= (bits & 0x00000002 << 2);
die_angle 2009-10-25
  • 打赏
  • 举报
回复
  1. *p |= (bits & 0x00000002 << 1);
  2. *p |= (bits & 0x00000002 << 2);


69,827

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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

手机看
关注公众号

关注公众号

客服 返回
顶部