Я новичок в уловках манипулирования битами, и я написал простой код, чтобы увидеть результат выполнения однобитовых сдвигов в одном числе, а именно.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
я использую компилятор gcc
в Ubuntu Linux