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]