2

所以我在 C# 中有以下 RotateLeft 算法:

    public static ushort RotateLeft(ushort value, int count)
    {
        int left = value << count;
        int right = value >> (16 - count);
        return (ushort)(left | right);
    }

如果编号方案不同,此算法是否会有所不同?

通过编号方案,我的意思是它是 MSB-0 还是 LSB-0

MSB-0

0             7
1 0 0 1 0 1 1 0

LSB-0

7             0
1 0 0 1 0 1 1 0

假设我想左移 1,有不同的编号方案会影响算法吗?

4

1 回答 1

1

看起来该算法与底层系统的小端或大端无关。也就是说,无论编号方案如何,它都会以相同的方式工作,因为 OR 操作在返回之前将移位的位添加回另一侧。假设您将它用于位级操作和标志检查,这可能就是您所需要的。

在不知道它如何适应您的程序的其余部分的情况下,很难说它是否会在使用相反位编号方案的不同平台上按您期望的方式工作。例如,如果您在使用 MSB-0 的设备上运行此程序并将一些移位数据写入二进制文件,然后在使用 LSB-0 的设备上读取该二进制数据,它可能不会是您所期望的.

如果您的目标是让您的软件在不同字节序的系统中以相同的方式工作,请查看 .NET BitConverter 类。如果您将其用于有效的数学运算,静态 BitConverter.IsLittleEndian 字段将让您检查底层架构,以便您可以以其他方式移动或相应地反转二进制数据。

于 2014-10-22T15:46:39.787 回答