2011-07-08 9 views
2

私が使用している第三者の関数に対して私のロジックのいくつかをダブルチェックしたいのですが、ビット単位のロジックが正しいかどうかは分かりません。誰かが、それぞれのシナリオで変数 'intValue'の値の範囲を与えて、各条件が真を返すようにすることはできますか?ありがとう!ビット単位の操作に関するヘルプ

int intValue = int.Parse("FFFFFF80", System.Globalization.NumberStyles.HexNumber); 

参照:

 if ((intValue < 0 && ((intValue & 0xFFFFFF80) == 0xFFFFFF80)) || 
      (intValue & 0x0000007F) == intValue) { 

     } 
     else if ((intValue < 0 && ((intValue & 0xFFFF8000) == 0xFFFF8000)) || 
      (intValue & 0x00007FFF) == intValue) { 

     } 
     else if ((intValue < 0 && ((intValue & 0xFF800000) == 0xFF800000)) || 
      (intValue & 0x007FFFFF) == intValue) { 

     } 
     else { 

     } 
+3

どのような*あなた*が彼らがいると思うか教えてください、そしてそこから行くでしょう! –

+0

上記の2つのコメントを要約するために、前の5つの質問に戻って人々が提供した回答を受け入れてください。 –

+5

明らかに私はばかだよ...それとも、私はレッドにあまりにも多くの時間を費やす...私は正しい答えをアップアップしようとしていた。ナンセンス、今あなたが指摘している私は小さなチェックマークを参照して、戻って、これらの正しい、マークマークを参照してください – snappymcsnap

答えて

2
if (intValue == (SByte)intValue) { 
    // matches -128...127, i.e. values that fit in one byte 
} 
else if (intValue == (Int16)intValue) { 
    // matches -32768..32767, values that fit in two bytes 
} 
else if (intValue == ((intValue << 8) >> 8)) { 
    // matches -2**23..(2**23-1), values that fit in three bytes 
} 
else { 
    // matches -2**31..(2**31-1), values that need four bytes 
} 

変数の型が署名されている場合、すべてのintValue < 0のテストが完全に冗長であることに注意してください。

+0

私はあなたが "変数タイプが_un_署名されている場合"を意味すると思いますか? – Lii

+1

@Lii:いいえ、私はしませんでした。その後のテストでは、符号ビットを調べます。 –

+0

そして、負の値を保持することができないので、変数に符号がつけられていないかどうかは同じです。 – Lii

関連する問題