所以我在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,有不同的编号方案会影响算法吗?
答案 0 :(得分:1)
看起来该算法与底层系统的小或大endianness无关。也就是说,无论编号方案如何,它都将工作相同,因为OR操作在返回之前将移位的位添加回另一侧。假设您正在使用它进行位级操作和标记检查,这可能就是您所需要的。
如果不知道它如何适合您的程序的其余部分,很难说它是否会像您期望的那样使用相反的位编号方案在不同平台上运行。例如,如果您在使用MSB-0的设备上运行此操作并将一些移位数据写入二进制文件,那么使用LSB-0在设备上读取该二进制数据,它可能不会成为您&#39 39;期待。
如果您的目标是让您的软件在不同端系统中运行相同,请查看.NET BitConverter Class。如果您正在使用它进行有效的数学运算,静态BitConverter.IsLittleEndian字段将允许您检查基础架构,以便您可以相反地转换或反向转换二进制数据。