Chapter 5 | Bit Manipulation

给定一个整数x,找出另外两个整数,这两个整数的二进制表示中1的个数和x相同, 其中一个是比x大的数中最小的,另一个是比x小的数中最大的。

找到x二进制表示右边起第一个1,(x&(-x))
从它开始找到第一个0,然后把这个0变为1, 比这个位低的位全置0。比如1101110,得到1110000,这个数比原数大,但比它少了两个1, 直接在低位补上这两个1,得到,1110011,这就是最终答案

有一些可能没有更大更小同1个数的值,这些边界条件,还有负数也要重新考虑。

for(int x = 1; x <= 20 ; x++)
        cout <<(  x&(-x) )<<endl;

输出结果:1 2 1 4 1 2 1 8 1 2 1 4 1 2 1 16 1 2 1 4

写程序计算从整数A变为整数B需要修改的二进制位数。

需要修改的就只是A和B二进制表示中不同的位, 先将A和B做异或,然后再统计结果的二进制表示中1的个数即可。

A xorB in code: (a^b)

写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现

操作的数为N,用N&0xaaaaaaaa(也就是10101010....)取出偶数位,用N&0x55555555(也就是01010101...)取出奇数位。
偶数位右移一位,奇数位则应该左移一位。
把操作之后的这两部分拼起来(或操作)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 清晨过乌龙潭放生池, 倏忽见芦花林白, 闻笼中鸟啼声脆, 一时阴雨天闲。 雪芹园外孤独坐, 班鸟渐离。 这般清景,...
    摩羯星一号阅读 343评论 3 9
  • 正态分布(normal distribution),normal: 常见的,典型的。正态分布即常见的分布。 正态分...
    嗯西西阅读 1,645评论 6 7
  • 林薇薇并没有什么重要的事,楚泽拿着我手机,在那一句一句地解释为什么下午没回信。我忽然觉得有点怪,昨天见面也没见他们...
    作者苏辰阅读 862评论 1 18
  • 微笑,站上额纹的顶峰 远眺,坎坷是一个拂袖 日子煮着阳光的蒸汽 慢慢升起 又,慢慢飘落 ——锋啸箭雨《逍遥》
    潘军轲阅读 1,188评论 0 0
  • 1、List使用场景 上图中有接口、抽象类和实现类,可以看到: List 是一个接口,它继承于Collection...
    拾壹北阅读 1,026评论 0 0