2016-04-06 19 views
-2

エラーが発生しています。私はすべてのタイプの型キャストを試みましたが、助けはありませんでした。ここで何が起こっているのか教えてください。ビットシフト中のコンパイルエラー "暗黙的に 'int'型を 'byte'に変換できません"

Error: Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) 

byte[] bitVector = new byte[UInt32.MaxValue/8]; 

//bitVector[((UInt32)x/8)] |= (1 << ((int)(x % 8))); ERROR 
//bitVector[((UInt32)x/8)] |= (1 << Convert.ToByte(x % 8)); ERROR 
bitVector[((UInt32)x/8)] |= (1 << 5); //No Error 
+0

bitVector配列の定義は何ですか –

+0

@名言Kamboj私の質問を編集しました。それはByte [] – user3604557

+0

ほとんどの複製 - http://stackoverflow.com/questions/4123788/whats-wrong-with-this-expression-cannot-implicitly-convert-type-in​​t-to-byte、正確に見つけることシフト演算子によって受け入れられ/返される型について説明します(ヒント:byteはそれらのどれでもありません)。コンパイル時定数の規則は異なっており、(サンプルの最後の行については)他の複製によってもカバーされることに注意してください。 –

答えて

1

役立つものと続い

bitVector[((UInt32)x/8)] |= (byte)(1 << x % 8) 

bit操作の結果はintegerですし、そのためには、

+0

お返事ありがとうございます。私は次のエラーに遭う。 "演算子 '<<'は型 'int'と 'uint'のオペランドには適用できません" – user3604557

+0

xの型は? –

+0

xがuint型の場合、次のように変更する必要があります。 (1 <<(int)(x%8)))。 (x%8)を明示的に整数に型変換 –

0

あなたはこれを使用する必要が明示的な型キャストを必要とし、byteタイプでそれを埋めるためにしようとしています

bitVector [((UInt32)x/8)] | =((byte)1 < <(1%8)) ;

バイトにシフトする定数を強制することで、バイト配列にint(バイトシフトの結果)を割り当てようとしているので、2つの問題が発生します。期待される結果。

+0

お返事ありがとうございます。私はこれを使うとすぐにエラーを受け取ります(x%8)。私は(1%8)ではなく、(x%8) – user3604557

関連する問題