Forum: Algorithmen, Datenstrukturen und Klassendesign
by Blup,
6. Jun 2017
Richtig müsste es heißen: (Longword(a) shr -1) -> (a shr 31)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Blup,
3. Mai 2017
So kann es funktionieren und ist übersichtlich:
for i := 31 downto 0 do
begin
Result := Result shl 1;
Result := Result or ((B shr i) and $1);
Result := Result shl 1;
Result := Result or ((A shr i) and $1);
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Blup,
3. Mai 2017
Der zweite Operand ist ein Byte, welches zusätzlich maskiert ist.
1.Operand|2.Operand signifikante Bits|entspricht
Byte|3|a shl (b mod 8)
Word|4|a shl (b mod 16)
Longword|5|a shl (b mod 32)
Int64|6|a shl (b mod 64)
Byte(-1) -> 255
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Blup,
3. Mai 2017
Wenn dann so:
for i := 0 to 31 do
begin
Result := Result shl 1;
Result := Result or (B shr 31);
B := B shl 1;
Result := Result shl 1;
Result := Result or (A shr 31);
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Blup,
3. Mai 2017
Beide verschieben die Bits nach links, aber shl schiebt nur 0-Bits von rechts nach.
12345678 shl 4 -> 23456780
12345678 rol 4 -> 23456781