Feel free to call the class whatever you like. Just when ever I port your code that is one of the first things I do is convert the vector class.
The reason for overwriting GetHashCode can be found in
http://stackoverflow.com/questions/7329 ... ethashcode.
It has to be done when overwriting the equals. The code of the shifting comes directly from Unity's Vector3 version. I used "ISpy" which is a program that can decompile dlls and I opened "UnityEngine.dll". Then went to its "UnityEngine" namespace and looked up Vector3. I choose to use their version because I did not want to spend extra time figuring out what they needed there but if it worked on floats (32 bit objects) then it should work on ints and produce similar results.
All I can assume is that it is making a value to use for comparison vs another vector similar to the Equal code in which the values are specifically readable to see what is going on during the comparison. It is probably used in sorted containers such as maps.