2017-01-28 8 views
3

ビット演算子に慣れていません。私はこれらのコードを持っている:C#ビットワイズ演算子vs JavaScriptビットワイズ演算子

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#で取得するには?

+3

の可能性のある重複した[Javaの符号なし右シフト演算子>>>のC#の同等とは何ですか](http://stackoverflow.com/questions/8125127/what -is-the-c-sharp-equivalent-of-java-unsigned-right-shift-operator)これはJava向けですが、これはJavaScriptの場合と同じです – abc123

+2

次のように試してください: 'value =(value << 1)| (int)((uint)value >> 27); ' –

答えて

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); 
+0

それは私の問題を解決しました。 –

+0

私はC#のゼロ経験でJavaScriptからC#にkindofハッシュメカニズムを変換しています。これが私を助けてくれました!ありがとうございました! –

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; 
     }