Я новичок в манипуляциях с битами и написал простой код, чтобы увидеть результат выполнения сдвига одного бита на одном числе viz. 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;
}
Результат получился следующим.
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
Очевидно, что непрерывный сдвиг бита влево на 1 бит приведет к нулю, как это было сделано выше, но почему компьютер выводит отрицательное число в самом конце перед завершением цикла (поскольку num стало нулем)?
Однако, когда я заменяю int num=2
на unsigned int num=2
, я получаю тот же результат, за исключением того.
что последнее число на этот раз отображается как положительное, т.е. 2147483648
вместо -2147483648
Я использую компилятор gcc
на Ubuntu Linux