Tja.. jetzt ist es mir passiert. Shiften reicht mir nicht, ich brauche ein Rotate! In der .net Klassenbibliothek hab ichs nicht gefunden. Also mal fix selber überlegt und umgesetzt.
public static class Utils
{
/// <summary>
/// Rotates the given int value right by the specified number of bits.
/// </summary>
/// <param name="number">The integer to rotate</param>
/// <param name="distance">The number of bits to rotate</param>
/// <returns>Returns the given int rotated right side by the given distance</returns>
public static int RotateRight(int i, int distance)
{
uint num = (uint)i;
int length = (sizeof(int) * 8);
distance = distance % length;
uint add = num << (length - distance);
num = num >> distance;
num = num | add;
return (int)num;
}
/// <summary>
/// Rotates the given int value left by the specified number of bits.
/// </summary>
/// <param name="number">The integer to rotate</param>
/// <param name="distance">The number of bits to rotate</param>
/// <returns>Returns the given int rotated left side by the given distance</returns>
public static int RotateLeft(int i, int distance)
{
uint num = (uint)i;
int length = (sizeof(int) * 8);
distance = distance % length;
uint add = num >> (length - distance);
num = num << distance;
num = num | add;
return (int)num;
}
}
Das ganze ist auch auf dotnet-snippets.de zu bewundern, und zu bewerten.