2017-01-28 2 views
3

비트 연산자에 익숙하지 않습니다. 나는이 코드를 가지고 :C# 비트 연산자 대 자바 JavaScript 비트 연산자

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

모두의 C#과 자바 스크립트 같은 -16을 초래하지만 자바 스크립트에서 C#을하지가 다른 운영자 >>>이있다. JavaScript 코드 :

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

C#으로 가져 오는 방법은 무엇입니까?

+3

가능 중복 ([자바 부호 오른쪽 시프트 연산자 >>>의 C# 1 당량 란]가 http://stackoverflow.com/questions/8125127/what -is-the-c-sharp-equivalent-of-java-unsigned-right-shift-operator) 특히 Java의 경우이게 자바 스크립트의 경우 동일합니다. – abc123

+2

다음을 시도해보십시오. 'value = (value << 1) | (int) ((uint) value >> 27); ' –

답변

5

Unsigned right shift assignment>>>을 입력하면 JavaScript가 실행됩니다.


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

나는 JavaScript에서 kindof 해싱 메커니즘을 C#으로 변환하고 있는데, C#의 경험이 없으므로이 덕분에 많은 도움이되었습니다! 고맙습니다! –

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