Самый быстрый алгоритм - готовый массив уже реверснутых байт. Занимает 256 байт, но работает чертовски быстро:
Y = Rev[X]
А так? вот вполне компактный и код, и довольно быстрый (57 команд на один байт). Синтаксис Паскаля:
function Rev(B:Byte):Byte;
var
i: Integer;
begin
Result := 0;
for i := 0 to 7 do
Result := Result or (((B and (1 shl i)) shr i) shl (7-i));
end;
// ---------------------------
Y := Rev(X);
На баскоме:
$regfile = "m48def.dat"
$crystal = 4000000
$baud = 19200
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Dim X As Byte
Dim Y As Byte
Dim I As Byte
Dim Ix As Byte
Dim K As Byte
X = 77 \'будет 178
Gosub Rev
Print Y
End
Rev:
Y = 0
For I = 0 To 7
K = 1
Shift K , Left , I
K = K And X
Shift K , Right , I
Ix = 7 - I
Shift K , Left , Ix
Y = Y Or K
Next I
Return