I am new to bit manipulation tricks, and I wrote simple code to see the result of doing single bits of shifts by one number, namely. 2
#include <iostream> int main(int argc, char *argv[]) { int num=2; do { std::cout<<num<<std::endl; num=num<<1;//Left shift by 1 bit. } while (num!=0); return 0; }
The result of this is as follows.
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648
Obviously, a continuous shift of bits to the left by 1 bit will lead to zero, as was done above, but why does the computer print a negative number at the very end before the end of the cycle (since num is reset)?
However, when I replace int num=2
with unsigned int num=2
, then I get the same result, except that the last number this time displays as positive, i.e. 2147483648
instead of -2147483648
I am using gcc
compiler on Ubuntu Linux
smilingbuddha
source share