UInt32型のビットごとにキャストint型への最速の方法は?
質問
私は、32ビットの色はUInt32型またはintとして格納されているいくつかの低レベルイメージ/テクスチャー操作を持ち、私は2つの間に本当に速いビット単位の変換を必要とする。
例えばます。
int color = -2451337;
//exception
UInt32 cu = (UInt32)color;
任意のアイデア?
おかげに関して
解決
int color = -2451337;
unchecked {
uint color2 = (uint)color;
// color2 = 4292515959
}
他のヒント
BitConverter.ToUInt32(BitConverter.GetBytes(-2451337), 0)
、変換中にオーバーフローのチェックを無効にするのは本当に便利な方法を持たないVB、のような言語を使用して、これらのようなものを使用することができます:
Shared Function unsToSign64(ByVal val As UInt64) As Int64 If (val And &H8000000000000000UL) 0 Then Return CLng(val Xor &H8000000000000000UL) Xor &H8000000000000000 Else Return CLng(val) End Function Shared Function signToUns64(ByVal val As Int64) As UInt64 If val < 0 Then Return CULng(val Xor &H8000000000000000) Xor &H8000000000000000UL Else Return CULng(val) End Function
または
Shared Function unsToSign(ByVal val As UInt64) As Int64 Return CLng(val And &H7FFFFFFFFFFFFFFFUL) + (CLng(-((val And &H8000000000000000UL) >> 1)) << 1) End Function Shared Function signToUns(ByVal val As Int64) As UInt64 Return CULng(val And &H7FFFFFFFFFFFFFFF) + (CULng(-((val And &H8000000000000000) >> 1)) << 1) End Function
32ビット用のバージョンは非常に似ているであろう。私は速くなると思われるアプローチはよく分かりません。シフトは少し愚かですが、彼らはテスト「もし」の必要性を回避します。
所属していません StackOverflow