ビット演算について混乱してきたので、質問させてください。
例えば、
a[0]=0100000
a[1]=11111110
a[2]=11111111
という各8ビットの配列があり、
a[0]の先頭1ビット目を捨ててa[1]とa[2]の8ビット目を捨てて結合させ、a[2]の1ビット目を結合し、合計16ビットを作りたい場合、
((a[0]<<9) | (a[1]<<1)) | (a[2] >> 7)
で良いのでしょうか?
実際に実行すると、オーバーフローが適用されず左シフトしても先頭1ビットが消えてくれなくて望んだ数値にならないので、
正しい答えを教えて欲しいです。
> a[0]の先頭1ビット目を捨ててa[1]とa[2]の8ビット目を捨てて結合させ、a[2]の1ビット目を結合し、合計16ビットを作りたい場合
意味が分かりません.最終結果にa[0]が噛んでいないように読めるし.
図とかで示せませんか?
どういう値を出したいんでしょうか。
わかりにくくてすみません。この画像のような感じにしたいです。
a[0]2bit~8bit + a[1]1bit~8bit + a[2]1bitで16ビットの並びにしたくて、今の((a[0]<<9) | (a[1]<<1)) | (a[2] >> 7)だと先頭がオーバーフローになってくれず17bitの並びになってしまう気がしています。
> 実際に実行すると、オーバーフローが適用されず左シフトしても先頭1ビットが消えてくれなくて望んだ数値にならないので、
なぜ、実際に実行したコードを質問に付けないのですか?
a の宣言は重要で、もし次のようになっていたら思わぬ結果になるでしょう。
char a[3] = { 0x40, 0xfe, 0xff };
回答3件
あなたの回答
tips
プレビュー