• 締切済み

ビット演算について

すみません、どうしても分からないのでご教授下さい。 ビット計算についてなのですが、 0x0585を2進数にして、0000 0101 1000 0101 となりますが、 これを6bitと10bitにわけて000001,0110000101とし、 これをまた16進数にしたいのですが、計算の仕方が分かりません。 ご教授お願い致します。

みんなの回答

  • lesskey
  • ベストアンサー率33% (66/200)
回答No.3

質問の意味が「?」ですが・・・ てか解釈出来ない自分に問題あるのか(^-^;) 2バイト整数→ビット分解→再生成 の意味の分からない ソースを書いてみますた。 void calc(void){ short nVal = 0x0585; short nMake; short n6bit, n10bit; //下位10ビット取得 n10bit = nVal & 0x3FF; //上位6ビット取得 n6bit = (nVal >> 10) & 0x3F; //下位10ビット、上位6ビットで元の値に戻す nMake = (n6bit << 10) + n10bit; //比較する。元の数と同じ場合 ok と出力 if(nMake == nVal){ printf("ok"); } } ---- 単に2進→16進計算ならANo.2さんが言ってるよーに 4ビット毎に分けて計算すれば良いかと・・・

shinbergen
質問者

お礼

質問の内容があいまいなのにご回答いただきありがとうございました。 自分自身の理解不足のため、もう少し勉強してみてどうしても理解できない時は再度質問させて頂きます。 申し訳ありませんでした。

回答No.2

ちゃんと質問で >0x0585を2進数にして、0000 0101 1000 0101 と4ビット毎に分けてるんだから、 000001,0110000101 を 00 0001 , 01 1000 0101 と4ビット毎にすれば、 00->0 0001->1 01->1 1000->8 0101->5 だから、 000001,0110000101 -> 00 0001,01 1000 0101 -> 0x01,0x185 ->0x0001,0x0185 になるんでは・・・

shinbergen
質問者

お礼

質問の内容があいまいなのにご回答いただきありがとうございました。 自分自身の理解不足のため、もう少し勉強してみてどうしても理解できない時は再度質問させて頂きます。 申し訳ありませんでした。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

「6bitと10bitにわけてからまた16進数にする」というのがどのような操作を指すのかまったく不明確なので、回答できません。

shinbergen
質問者

補足

質問の内容があいまいですみませんでした。 もう少し自分で理解してから再度質問させて頂きます。 失礼しました。

関連するQ&A