C# 按位运算符 vs Javascript 按位运算符
C# bitwise operator vs Javascript bitwise operator
我不熟悉按位运算符。我有这些代码:
var value= -2145643504;
value = (value << 1) | (value >> 27);
//result: -16
C# 和 JavaScript 结果相同 -16 但在 JavaScript 中还有另一个运算符 >>> 而 C# 没有。 JavaScript 中的代码:
var value= -2145643504;
value = (value << 1) | (value >>> 27);
//result: 3680304 //wanted result in C#
有任何在 C# 中获取它的解决方案吗?
在 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);
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;
}
我不熟悉按位运算符。我有这些代码:
var value= -2145643504;
value = (value << 1) | (value >> 27);
//result: -16
C# 和 JavaScript 结果相同 -16 但在 JavaScript 中还有另一个运算符 >>> 而 C# 没有。 JavaScript 中的代码:
var value= -2145643504;
value = (value << 1) | (value >>> 27);
//result: 3680304 //wanted result in C#
有任何在 C# 中获取它的解决方案吗?
在 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);
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;
}