C#의 두 개의 uints를 ulong으로 결합하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1209439

  •  06-07-2019
  •  | 
  •  

문제

C#의 두 개의 uint를 ulong으로 결합하여 높은/낮은 uints를 설정하는 가장 좋은 방법은 무엇입니까?

Bitshifting이 그렇게 할 수 있다는 것을 알고 있지만 구문이나 BitConverter와 같은 다른 API를 알지 못하지만 원하는 작업을 수행하는 메소드가 보이지 않습니다.

도움이 되었습니까?

해결책

ulong mixed = (ulong)high << 32 | low;

캐스트는 매우 중요합니다. 캐스트를 생략하면 사실을 고려할 때 high 유형입니다 uint (32 비트), 왼쪽으로 32 비트 값을 32 비트 값으로 이동하게됩니다. 32 비트 변수의 변속 연산자는 다음을 사용합니다. right-hand-side 모드 32. 효과적으로, 이동 a uint 왼쪽에 32 비트 NO-OP입니다. 캐스팅 ulong 이것을 방지합니다.

이 사실을 확인하는 것은 쉽습니다.

uint test = 1u;
Console.WriteLine(test << 32); // prints 1
Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1

다른 팁

ulong output = (ulong)highUInt << 32 + lowUInt

그만큼 << 그리고 >> 연산자는 각각 왼쪽 (하이) 및 오른쪽 (하단)으로 비트로 비트로 변합니다. highUInt << 32 기능적으로 동일합니다 highUInt * Math.Pow(2, 32), 그러나 더 빠르고 (IMO) 더 간단한 구문입니다.

비트 시프트하기 전에 HighInt를 Ulong으로 변환해야합니다.

ulong output = highInt;
output = output << 32;
output += lowInt;

부호화:

ulong mixed = (ulong)hi << 32 | lo;

디코딩:

uint lo = (uint)(mixed & uint.MaxValue);
uint hi = (uint)(mixed >> 32);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top