delhi位移与.NET位移区别

最近一个项目需要将一个DELPHI加密算法转移到C#中,发现右移与字符,C#和DELHI表示的结果不一样,经查看资料,

特说明如下:

 

一:正数与负数表示。

    负数在计算机中用补码的形式,即正数的二进制取反加1就表示它的负数。例如: 32位的1,二进制表示为:00000000000000000000000000000001(Ox0001),

-1就表示为 11111111111111111111111111111111(OxFFFFFFFF)

二:右移

在C#中,右移 如果是正数的话,向右边移动,左边留下的空白位由0来填充,如果是负数的话,左边空白位由1来填充。 

在DELPHI中,右移的话,不管是正数还是负数,左边留下的空白位都是由0来填充。

例如:

在DELPHI中,

  i:  integer; 

  i :=-1;

  i shr 1    得到的结果是 Ox7FFFFFFE

 

在C#中

  int i=-1;

  i >> 1    得到的结果是OxFFFFFFFF

 

三:左移

左移运算,C#和DELPHI,正数和负数,都是向左移动,右边留下来的空白位由0来填充。

 

 

四:Char

在C#和DELPHI中都是字节符类型。

不过DELPHI的字符就占一个字节,8位。

而C#的字符类型可以表示Uncode码,可以占用2个字节。

 

五:delhi的SHR操作符转化成C#的函数

    internal static int DelphiShr(int value, int offset)
    {
        BitArray array = new BitArray(new int[] { value });
        offset %= array.Count;
        for (int i = 0; i < array.Count; i++)
        {
            array[i] = i < array.Count - offset ? array[i + offset] : false;
        }
        int[] result = new int[1];
        array.CopyTo(result, 0);
        return result[0];
    }

 

 

 

posted @ 2009-06-22 14:48  老二  阅读(460)  评论(0编辑  收藏  举报