Na verdade, existe uma razão matemática razoavelmente boa para fazer a replicação de bits:
Primeira nota que a cadeia n-bit, , na verdade, representa o valor de e queremos produzir a seqüência de m-bit, , onde e
NN2n−1Mn<mN2n−1≈M2m−1
Escalamos primeiro o numerador e o denominador com
e isso simplifica para
N.(2n+1)(2n−1)(2n+1)≈M2m−1
N.(2n+1)22n−1≈M2m−1
No seu caso, e e nós podemos "stop" aqui, mas mas o processo pode ser repetido, (ad nauseum), se m >> n.n∈{5,6}m=8
Em seguida, fazemos a aproximação ...
que simplifica para
N.(2n+1)22n≈M2m
N.(2n+1)22n−m≈M
Observe que é equivalente a repetir a sequência de n bits, para criar uma sequência de 2 bits e a divisão desliga os LSBs de para deixar um resultado em M bits.N.(2n+1)2n−m
QED
Obviamente, o cálculo 'correto' é mas essa aproximação, em geral , funciona na maioria das vezes.É claro que há momentos em que é impreciso, mas o IIRC é apenas um pouco e relativamente pouco frequente.M=⌊((2m−1)N2n−1+12⌋