값을 계산하고 UInt32를 반환하는 빠른 비트 수준 루틴을 가지고 있습니다. 이 값을 32 비트 int 필드에 SQL Server에 저장해야합니다. 필드의 크기를 늘리고 싶지 않고이 함수의 "바이트"를 int 필드에 저장하려고합니다.C에서 가장 빠른 UInt32 변환 #
한 번에 수백 개의 레코드가 요청되므로 UInt32를 루프에서 int로 변환하는 가장 빠른 방법이 필요합니다. 맨 왼쪽 비트가 UInt32에 설정되어 있으면 int의 부호 비트를 설정해야합니다 (또는 실제로 "반복 가능"한 모든 작업을 수행하지만 실제로는 부호 비트가 가장 쉽습니다).
즉, UInt32의 4 바이트가 32 비트 int의 4 바이트가되도록합니다. BitConverter 클래스를 사용할 수는 있지만 가장 빠른 방법은 아닌 것 같습니다.
UInt32 fld = 4292515959;
unchecked {
return (int)fld;
// -2451337
}
내가 반대 질문은 여기 요구 된보고, 대답은 다른 방법으로가는 같은 것이 있다면 그냥 궁금 :
은이 같은 검사되지 않은 영역이 작업을 수행하기 위해 빠른 것
Fastest way to cast int to UInt32 bitwise?
동일합니다. C#을 안전 점검과 함께 C로 생각할 수 있습니다. 따라서 unsigned int를 int로 타입 변환하려면 type casting을 사용하십시오. 그러나 컴파일러가 의도를 확인하지 않도록 컴파일러에 신호를 보냅니다. 그렇게하지 않으면 컴파일러가 할당이 호환되지 않는 오류를 일으킬 수 있습니다. 호환성이 없다면 값의 충실도가 손실 될 수 있습니다 (예 : 4292515959는 더 이상 같지 않고 음수가됩니다. 2451337 (컴퓨터 과학자 [xkcd 541]의 관점에서 같음)) –
Michael 감사합니다. 당신이 이것을 논평하지 않았다면, 나는 즉시 이것을 대답으로 썼을 것입니다. – Flipster