提个位运算的问题

cnsdwfwy 2011-05-25 11:38:02
提个位运算的问题。
对一个无符号整数,
如果1的左右都是0,那么该位的1保留,
如果1的左右任何一侧也是1,那么该位变为0,
例如:00100011100 -> 00100000000
...全文
87 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-05-26
  • 打赏
  • 举报
回复
(((n<<1)|(n>>1))&n)^n
qq120848369 2011-05-26
  • 打赏
  • 举报
回复
啊。是1才变的啊。再思考下
MewX 2011-05-26
  • 打赏
  • 举报
回复
先转成二进制的字符串,再比较把。
downmooner 2011-05-26
  • 打赏
  • 举报
回复
坑爹了。。我把!当成~了。。搞了半天

i & (((~i) >> 1) & ((~i) << 1) );
acdbxzyw 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 downmooner 的回复:]

如果1的左右都是0,那么该位的1保留,
如果1的左右任何一侧也是1,那么该位变为0,

例如:00100011100 -> 00100000000

按照题目的意思 我感觉 结果应该是00100010100

还是你的题目里的任何 是 任意呀?

任意一侧的结果是 0010000000
[/Quote]
任何一侧是1
任何一侧是1
downmooner 2011-05-26
  • 打赏
  • 举报
回复
如果1的左右都是0,那么该位的1保留,
如果1的左右任何一侧也是1,那么该位变为0,

例如:00100011100 -> 00100000000

按照题目的意思 我感觉 结果应该是00100010100

还是你的题目里的任何 是 任意呀?

任意一侧的结果是 0010000000
acdbxzyw 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]

(((n<<1)|(n>>1))&n)^n
[/Quote]
厉害。。。
我也写了一个
(~((n>>1)|(n<<1)))&n
cnsdwfwy 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]
(((n<<1)|(n>>1))&n)^n
[/Quote]


GOOD!!
qq120848369 2011-05-25
  • 打赏
  • 举报
回复
~((n<<1)|(n>>1))
jernymy 2011-05-25
  • 打赏
  • 举报
回复
按位相乘
0*0=0
1*0=0
1*1=1

1010
&1101
-----
1000

64,637

社区成员

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

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