Это из-за того, как числа представлены в компьютере ( дополнение к двум ).
Шестнадцатеричная цифра 8
является двоичной 1000
, поэтому двоичное представление числа врегистр имеет самый левый бит 1
(отрицательный).Шестнадцатеричная цифра 4
равна 0100
, поэтому она начинается с 0
(положительное значение).
> 0x80000000
-2147483648
> 0x40000000
1073741824
Она не имеет ничего общего с оператором &
, тем более что два AND одинаковые, даютэта вещь снова.