dirtysalt edited a comment on pull request #670:
URL: https://github.com/apache/orc/pull/670#issuecomment-808692529
@dongjoon-hyun 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]