В обоих случаях, которые вы цитируете, важна битовая комбинация числа, а не фактическое число.
Например,
В первом случае
j
будет 1, затем 2, 4, 8, 16, 32, 64 и, наконец, 128 по мере прохождения цикла.
В двоичном виде, то есть
0000:0001
, 0000:0010
, 0000:0100
, 0000:1000
, 0001:0000
, 0010:0000
, 0100:0000
и 1000:0000
.
Нет опции для двоичных констант в C или C ++, но это немного понятнее в Hex:
0x01
, 0x02
, 0x04
, 0x08
, 0x10
, 0x20
, 0x40
и 0x80
.
Во втором примере
цель состояла в том, чтобы удалить два младших байта значения.
Таким образом, учитывая значение 1,234,567,890, мы хотим получить 1,234,567,168.
В шестнадцатеричном виде это понятнее: начинайте с 0x4996:02d2
, заканчивайте 0x4996:0000
.