Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:不同位编号方案的左旋转算法_C#_Rotation_Bit_Shift_Lsb - Fatal编程技术网

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

C#:不同位编号方案的左旋转算法,c#,rotation,bit,shift,lsb,C#,Rotation,Bit,Shift,Lsb,我在C#中有以下RotateLeft算法: LSB-0 假设我想左移1,不同的编号方案会影响算法吗?看起来算法不知道底层系统的大小。也就是说,无论采用何种编号方案,其工作原理都是相同的,因为OR操作在返回之前将移位的位添加回另一侧。假设您将其用于位级操作和标志检查,这可能就是您所需要的全部 如果不知道它如何融入程序的其余部分,就很难说它在使用相反的位编号方案的不同平台上是否能按预期的方式工作。例如,如果在使用MSB-0的设备上运行此操作,并将一些移位数据写入二进制文件,然后在使用LSB-0的设备

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

LSB-0


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

看起来算法不知道底层系统的大小。也就是说,无论采用何种编号方案,其工作原理都是相同的,因为OR操作在返回之前将移位的位添加回另一侧。假设您将其用于位级操作和标志检查,这可能就是您所需要的全部

如果不知道它如何融入程序的其余部分,就很难说它在使用相反的位编号方案的不同平台上是否能按预期的方式工作。例如,如果在使用MSB-0的设备上运行此操作,并将一些移位数据写入二进制文件,然后在使用LSB-0的设备上重新读取该二进制数据,则可能不会达到预期效果

如果您的目标是让您的软件在不同的endian系统中工作相同,那么看看.NET。如果您使用它进行高效的数学运算,静态BitConverter.IsLittleEndian字段将允许您检查底层架构,以便您可以以另一种方式移动或相应地反转二进制数据

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