해시 값을 효율적으로 결합하려면 해당 범위를 알고 이것을 어떻게 비트로 표현할지 생각해야 한다. 덧셈 연산이나 단순 OR/XOR 연산과 같은 연산자를 사용하더라도 예상보다 더 많은 충돌이 발생할 수 있다. 시프트 연산도 활용해야 한다. 적절한 GetHashCode 함수는 전체 32비트 정수에 걸쳐 적당한 분포를 얻기 위해 비트 연산을 사용한다.
이런 코딩 작업은 싸구려 해커 영화의 해킹 장면처럼 보일 수 있다. 이 개념에 익숙한 사람이라도 이해하기 애매하고 어렵다. 우리는 기본적으로 32비트 정수 중 하나를 16비트로 변환하고 여기서 가장 낮은 바이트를 가운데로 옮기고, 다른 32비트 정수와 함께 XOR 연산(^)을 실행하여 충돌 가능성을 크게 낮춘다. 코드는 다음과 같다. 어쩌면 너무 어렵다고 느낄 수 있다.
public override int GetHashCode() { return (int)(((TopicId & 0xFFFF)<< 16) ^ (TopicId & 0xFFFF0000 >> 16) ^ PostId); }