dirtysalt commented on pull request #670:
URL: https://github.com/apache/orc/pull/670#issuecomment-808692529


   Oh. I never know that Java bit shift `<<` is sort of like a circular bit 
shift.  That's to say `1L << 129` equals `1L << (129 % 64)`. So that explains 
why `1L << position` works. 
   
   If I do that in C++, the compiler will give a warning, and the result is 
undefined.
   ```
   /// c++ code
   int main() {
       unsigned long long x = 0;
       x |= (1ULL << 129);
       printf("%llu\n", x);
       return 0;
   }
   
   /// shell execution
   mac :: ~/Public » g++ test.cpp
   test.cpp:14:16: warning: shift count >= width of type 
[-Wshift-count-overflow]
       x |= (1ULL << 129);
                  ^  ~~~
   1 warning generated.
   mac :: ~/Public » ./a.out
   4526632784
   mac :: ~/Public » ./a.out
   4345032528
   ```
   
   But I do suggest modifying documentation as `1L << (position % 64)` which is 
less confused to C++ guys. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to