C#:不同位编号方案的左旋算法

标签 c# rotation bit shift lsb

所以我在 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/

相关文章:

c# - 寻找将 DotNetOpenAuth 与 WebAPI 结合使用的示例

c# - GUI 控件上的线程访问

rotation - CGAL:如何将一个 3D 矢量旋转到另一个矢量上?

html - 使背景图像在旋转时填满所有空间

c# - 一旦物体撞到墙上,就从墙上反射一个物体

c - 添加位,更简单

dynamic-programming - 从 1 到 n 的数字的集合位之和至少为 k

java - 位是如何存储在内存中的? (在 block 中?可以将多个大小的位存储在一起吗?)

c# - 标题中的 URL 重写和 html 规范链接,以避免搜索引擎出现重复页面问题

c# - 通过 SSL/TLS 使用 WebApi 自托管