最近,我一直在浏览一些OpenJDK代码,并在其中找到了一些与按位操作有关的有趣代码。我什至在StackOverflow上问了一个问题。
另一个例子说明了这一点:
1141 public static int bitCount(int i) {
1142 // HD, Figure 5-2
1143 i = i - ((i >>> 1) & 0x55555555);
1144 i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
1145 i = (i + (i >>> 4)) & 0x0f0f0f0f;
1146 i = i + (i >>> 8);
1147 i = i + (i >>> 16);
1148 return i & 0x3f;
1149 }
可以在Integer类中找到此代码。
当我看着这个时,我不禁感到愚蠢。我是否错过了一两个大学的课程,或者这不是我应该得到的?我可以执行简单的按位运算(例如ANDing,ORing,XORing,shifting),但是,有人会想出上面的代码吗?
全面的程序员需要按位操作有多好?
附带一提...让 我担心的是,在StackOverflow上回答我的问题的人在几分钟之内回答了该问题。如果他能做到这一点,为什么我只是盯着大灯中的鹿?
>>>
作为操作员到底是什么?
// HD, Figure 5-2
将是我首先要看的东西。根据文件开头的注释,HD
是Henry S. Warren, Jr.'s Hacker's Delight
。