zoukankan      html  css  js  c++  java
  • 一种Θ(1)的计算32位整数二进制中1的个数的方法

    今天,在微软的.net Core中,看到了一种超级神奇的计算二进制整数中1的个数的方法,使用C语言实现如下:

    int pop_count(unsigned int value)
    {
        value -= (value >> 1) & 0x55555555u;
        value = (value & 0x33333333u) + ((value >> 2) & 0x33333333u);
        value = (((value + (value >> 4)) & 0x0F0F0F0Fu) * 0x01010101u) >> 24;
        return (int)value;
    }
    

    0x55555555 = 0101 0101 0101 0101 0101 0101 0101 0101‬‬
    0x33333333 = 0011 0011 0011 0011 0011 0011 0011 0011‬
    0x0F0F0F0F‬ = 0000 1111 0000 1111 0000 1111 0000 1111
    0x01010101 = 0000 0001 0000 0001 0000 0001 0000 0001

    这段代码的简洁和高效着实让我佩服不已,但是我实在无法明白其中的原理,欢迎各位大佬在底下的评论区指教。

  • 相关阅读:
    IndexDB
    实现es6中的set和map
    视口viewport
    nginx入门
    http协议
    图像格式
    promise
    js中this指向
    CSS 7阶层叠水平
    C# 一个方法如何返回多个值
  • 原文地址:https://www.cnblogs.com/mrfangd/p/count-1-in-binary.html
Copyright © 2011-2022 走看看