C#按位运算符vs Javascript按位运算符

时间:2017-01-28 07:51:31

标签: javascript c# bitwise-operators

我不熟悉按位运算符。我有这些代码:

var value= -2145643504;
value = (value << 1) | (value >> 27);
//result: -16

C#和JavaScript都会产生相同的 -16 但是在JavaScript中还有另一个C#没有的运算符&gt;&gt;&gt; 。 JavaScript中的代码:

 var value= -2145643504;
 value = (value << 1) | (value >>> 27);
 //result: 3680304    //wanted result in C#

使用C#获取它的任何解决方案?

2 个答案:

答案 0 :(得分:5)

在JavaScript中,您正在使用>>>进行Unsigned right shift assignment

To duplicate this in C# you will need to use >> but you must first cast the int.

int x = -100;
int y = (int)((uint)x >> 2);
Console.WriteLine(y);

答案 1 :(得分:1)

            var value = -2145643504;
            value = (value << 1) | rightMove(value , 27);
            //value = 3680304

        int rightMove(int value, int pos)
        {
            if (pos != 0)
            {
                int mask = 0x7fffffff;
                value >>= 1;
                value &= mask;
                value >>= pos - 1;
            }
            return value;
        }