怎样理解稍微复杂一点的位运算

蟹妖。现在的提问者总是匿名。long fun_c(unsigned long x){ long val = 0; int i; // 这个循环是把x的分别把每个字节的每个bit加起来 for (i = 0; i \u0026lt; 8; i++) { val += x \u0026amp; 0x0101010101010101L; x \u0026gt;\u0026gt;= 1; } // 这三个相当于把每个字节都加起来 val += (val \u0026gt;\u0026gt; 32); val += (val \u0026gt;\u0026gt; 16); val += (val \u0026gt;\u0026gt; 8); return val \u0026amp; 0xff; // 最后只取最后一个字节的值,因为那就是结果}这个函数这么看,实际上就是算一下x里面有多少个bit是1。原题目中代码是用C写的么?好像连语法都没对啊。一眼看出来是不太可能的,最好的办法就是顺着代码用大脑跑一遍。


    推荐阅读