На самом деле есть достаточно веская математическая причина для выполнения битовой репликации:
Сначала обратите внимание, что n-битная строка, Nна самом деле представляет ценность N2N- 1 и мы хотим получить m-битную строку, M, где п < м а также
N2N- 1≈M2м- 1
Мы сначала масштабируем числитель и знаменатель с
N, (2N+ 1 )(2N- 1 ) (2N+ 1 )≈M2м- 1
и это упрощает
N, (2N+ 1 )22 н- 1≈M2м- 1
В твоем случае, n ∈ { 5 , 6 } а также м = 8 и мы можем «остановиться» здесь, но процесс можно повторить (до тошноты), если m >> n.
Затем мы сделаем приближение ...
N, (2N+ 1 )22 н≈M2м
что упрощает
N, (2N+ 1 )22 н - м≈ М
Обратите внимание, что N, (2N+ 1 ) эквивалентно повторению n-битной строки для создания 2n-битной строки, и деление сдвигается 2 н - м МЗБ, чтобы оставить результат M бит.
QED
Конечно, «правильный» расчет M= ⌊ ((2м- 1 ) N2N- 1+12⌋но это приближение, как правило, работает большую часть времени. Конечно, бывают случаи, когда это неточно, но IIRC только на один бит и относительно редко.