0x01 - это младший значащий бит, следовательно, десятичное значение равно 1.
0x80 - самый значимый бит из набора 8-битных байтов. Если он хранится в подписанном символе (на машине, которая использует нотацию с дополнением до 2 - как это может ожидать большинство машин), это наиболее отрицательное значение (десятичное -128); в беззнаковых символах - десятичное число + 128.
Другой шаблон, который становится второй натурой - это 0xFF со всеми установленными битами; это десятичное значение -1 для знаков со знаком и 255 для знаков без знака. И, конечно, есть 0x00 или ноль без установленных битов.
То, что делает цикл в первом цикле, - это проверка, установлен ли младший бит (младший значащий бит), и, если он установлен, задает старший бит (младший значащий бит) в результате. В следующем цикле он проверяет следующий за LSB и устанавливает следующий за MSB и т. Д.
| MSB | | | | | | | LSB |
| 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | Input
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | Output
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x80
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0x01
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | (0x80 >> 1)
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | (0x01 << 1)