解答

✨ 最佳解答 ✨

今回の16進数の12.3は計算すると、
2進数 0000 0001 0010 . 0011
8進数 0022.14
10進数 18.1875
16進数 12.3

この結果、先に答えは10010.0011になります。
今回、16進数を2進数に直接変換するには、4桁ずつに区切って考えますが、
16進数の0.3は、0.0011となるので、それをくっつくればいいだけになります。

自分で計算(?)したら、このようになって、どうしても10010.0011にならないんです😭
どうして、最初のところが10010になるのでしょうか?

留言

解答

おはようございます!返信ありがとうございます。

これは、もともと16進数から2進数に直す問題です。
16進数を10進数に直してから2進数に直しても間違いではありませんが、
16進数は2進数を4条すると16進数になる特別なパターンなのでシフト演算が適用できます。

シフト演算とは、もう画像からお分かりだと思いますが、
1010101101のような1と0だけの文字列を4桁ごとに区切って計算したり、
値を左に1桁動かすだけで、2倍の値になったり、右に動かすだけで1/2倍の値になる性質を利用した演算のことです。

また、16,8,4,2,1で当てはめて計算していいのは、10進数を2進数に直す場合だけで、
16進数を2進数に直す過程で10進数に変換する場合、この方法ではうまくいきません。
というのも、2進数を10進数に変換する場合、うまくいかない例外があるからです。
例えば、10進数の0.2=0000 0000 . 0011 0011 0011 0011 0011 0011...となるからです。

したがって、最初に書きましたシフト演算を適用するのがベストな解法で、
16進数を12.3なら[0001][0002].[0003]と移動させて、[]の中だけで[0001][0010].[0011]として、
これをつなげて、10010.0011とすると解決します。

新しい画像を見ながら、回答できなかったので、間違いがありましたらすみません。
また、わからなかったらどんどん聞いて下さい。

こんばんは。
だいぶ日が空いてしまい申し訳ございません😭
とてもわかりやすい説明ありがとうございます😭
大変感謝しております🥲
お陰様で解決できました‥!
本当にありがとうございました!

留言
您的問題解決了嗎?