bit manipulation - set most significant bit in C -


i trying set significant bit in long long unsigned, x. using line of code:

x |= 1<<((sizeof(x)*8)-1); 

i thought should work, because sizeof gives size in bytes, multiplied 8 , subtract 1 set final bit. whenever that, compiler has warning: "warning: left shift count >= width of type"

i don't understand why error occurring.

the 1 shifting constant of type int, means shifting int value sizeof(unsigned long long) * 8) - 1 bits. shift can more width of int, apparently happened in case.

if want obtain bit-mask mask of unsigned long long type, should start initial bit-mask of unsigned long long type, not of int type.

1ull << (sizeof(x) * char_bit) - 1 

an arguably better way build same mask be

~(-1ull >> 1) 

or

~(~0ull >> 1) 

Comments

Popular posts from this blog

c# - Better 64-bit byte array hash -

webrtc - Which ICE candidate am I using and why? -

php - Zend Framework / Skeleton-Application / Composer install issue -