Шестнадцатеричные числа - это числа, как указывает ответ Нормана. Однако 1 шестнадцатеричная цифра = 4 бита, поэтому эти операции действительно имеют смысл как вещи, которые вы, возможно, захотите сделать для целочисленных значений.
2-й - это битовое вращение на 4 бита. См. Рекомендации по операциям кругового сдвига (вращения) в C ++ , где приведены рекомендации по удобному для компилятора поворотам, которые защищают от неопределенного поведения C / C ++.
Если ваш ввод не 8, 16, 32 или 64 бита, то вам может потребоваться сдвиг + маска вручную, вместо того, чтобы полагаться на сдвиг в нулях.
Для первого потребуется больше кода: он меняет порядок отрывков. Для этого нет машинной инструкции или простого способа построить ее из нескольких побитовых операций сразу для всего числа.
Я думаю, вам придется изменить порядок байтов, а затем изменить порядок полубайтов внутри каждого байта (8-битный поворот на 4).