나는 최근에 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
.