это операторы сдвига битов или просто операторы сдвига
- Сдвиг вправо (>>)
- Сдвиг влево (<<) </li>
теперь ваш код
int aaa = 0x5c0000a3;
в двоичном формате aaa
будет выглядеть следующим образом
1011100000000000000000010100011
в printf
есть два выражения, первое выражение (aaa >> 12)
сдвигает 12 бит вправо, заполняя 12 бит с левой стороны до нулей, что приводит к двоичному значению, например
1011100000000000000
, которое при преобразовании в шестнадцатеричный код приводит к 0x5C000
, соответствующему спецификатору формата для этогоравен %08x
, который будет заполнять нули слева и выводить 0005c000
на консоль
Аналогичная ситуация происходит при применении left shift
, где aaa
смещается влево при заполнении 16 нулевыми нулевыми битами справа.