所以我在 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,使用不同的编号方案会影响算法吗?
最佳答案
看起来该算法与底层系统的大小无关endianness .也就是说,无论编号方案如何,它的工作方式都是一样的,因为 OR 运算在返回之前将移位的位加回到另一侧。假设您将它用于位级操作和标志检查,这可能就是您所需要的。
在不知道它如何适合您的程序的其余部分的情况下,很难说它是否会在使用相反的位编号方案的不同平台上按照您期望的方式工作。例如,如果您在使用 MSB-0 的设备上运行它并将一些移位数据写入二进制文件,然后在使用 LSB-0 的设备上读回该二进制数据,它可能不是您所期望的.
如果您的目标是让您的软件在不同字节序的系统中以相同的方式工作,请查看 .NET BitConverter Class .如果您将其用于高效的数学运算,静态 BitConverter.IsLittleEndian 字段将让您检查底层架构,以便您可以以其他方式移动或相应地反转二进制数据。
关于C#:不同位编号方案的左旋算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511028/