Hey,
Ich bin dabei für
Das bedeutet nichts anderes als RotateRight bzw RotateLeft und ist anders als normale Shift-Operationen zyklisch, man hat also keinen Informationsverlust.
Hier ein Bild zur Verdeutlichung:
Das wäre RotateLeft, RotateRight ist dementsprechend das gleiche in die andere Richtung.
Hier ist mein Ansatz (der teilweise funktioniert):
Das Problem ist, nicht für alle Zahlen haut das hin. Insbesondere die negativen Werte und die Maxwerte machen Probleme.
Eigentlich ergibt das keinen Sinn da man ja nur bits verschiebt. Hier mal mein Unit-Test:
Results (manchmal failen 3, manchmal 4):
Was habe ich übersehen, weshalb failen manche der Werte?
Ich bin dabei für
Int32
und Int64
jeweils eine Ror bzw eine Rol Funktion zu schreiben.Das bedeutet nichts anderes als RotateRight bzw RotateLeft und ist anders als normale Shift-Operationen zyklisch, man hat also keinen Informationsverlust.
Hier ein Bild zur Verdeutlichung:
Das wäre RotateLeft, RotateRight ist dementsprechend das gleiche in die andere Richtung.
Hier ist mein Ansatz (der teilweise funktioniert):
Das Problem ist, nicht für alle Zahlen haut das hin. Insbesondere die negativen Werte und die Maxwerte machen Probleme.
Eigentlich ergibt das keinen Sinn da man ja nur bits verschiebt. Hier mal mein Unit-Test:
C#-Quellcode
- public class Tests
- {
- private static readonly Random Random = new Random();
- [Theory]
- [InlineData(0)]
- [InlineData(1)]
- [InlineData(-1)]
- [InlineData(123456)]
- [InlineData(-123456)]
- [InlineData(int.MaxValue)]
- [InlineData(int.MinValue)]
- public void TestRor(int input)
- {
- int shiftCount = Random.Next(0, 32);
- int leftShifted = (input << shiftCount) | (input >> (32 - shiftCount));
- int rightShifted = ROR(leftShifted, shiftCount);
- Assert.Equal(rightShifted, input);
- }
- public static int ROR(int value, int count)
- {
- return (value >> count) | (value << (32 - count));
- }
- }
Results (manchmal failen 3, manchmal 4):
Was habe ich übersehen, weshalb failen manche der Werte?
C# Developer
Learning C++
Learning C++