Der Shift muß unbedingt ausgeführt werden (wie er da steht), C# scheint aber nur eine Möglichkeit zu bieten, die einen uint mit einem Count-Wert bewegt, der als int-Wert festgelegt wird. Wie kann ich den Shift so ausführen, daß er ohne Schleifen (also ohne Zeitaufwand) durchgeführt werden kann?
Ich bedanke mich für alle Mühen und Hilfen. Nach einigen Versuchen habe ich mich für die nachfolgende Version entschieden und benötige nun keine Hilfe mehr:
Macht das obige Beispiel überhaupt Sinn? Die Online-Hilfe (http://msdn.microsoft.com/en-us/library/a1sway8w(VS.90).aspx) sagt zum Shift-Operator, dass der rechte Wert immer ein int sein muss und dass, je nachdem ob der linke Wert ein (u)int oder (u)long ist, zum shiften die untersten 5 oder 6 Bits des rechten Wertes verwendet werden.
Im Zweifel könntest du den zweiten Wert, solange er kleiner als maxint bleibt, nach int casten.
> die unterstes 5 bis 6 bits oder in Zahlen: der rechte Wert muss ein int im Bereich von 0 bis 31 bzw. 63 sein. Wenn Du den linken Wert (z.B. ein int) um 32 Stellen verschieben würdest, ist der Wert immer 0. Daher macht das und alles darüber keinen Sinn... Bei long entsprechend 63 Stellen.
Ein int Wert reicht völlig aus. Die Ergebnisse sind identisch bei i << 1, i << 33, i << 65, ... Somit solltest du b % 32 verwenden können. Damit wäre b = 15 und sum = 232226816 (und der Zeitbedarf gegen 0)
1976304495 hat in den unterste 5 bits einen Wert von 15. Folglich rechnet C#
2737970095 << 15