address
アドレスに11101111が格納されているとします。最後の4ビットに最初の4ビットを追加するにはどうすればよいですか?Cでのビット演算
私の教授は私たちがこれを行うことができることを示しました(*address)/16 + (*address)%16
しかし、なぜそれが動作するのか分かりません。誰かが、16の除算とモジュロがどこから来たのか説明できますか?
address
アドレスに11101111が格納されているとします。最後の4ビットに最初の4ビットを追加するにはどうすればよいですか?Cでのビット演算
私の教授は私たちがこれを行うことができることを示しました(*address)/16 + (*address)%16
しかし、なぜそれが動作するのか分かりません。誰かが、16の除算とモジュロがどこから来たのか説明できますか?
@VanGoビット操作を参照するには、まずビット演算子を学習する必要があります。
ここで問題を説明しています。
11101111(バイナリ形式)で、239(10進数)に相当します。 1111に1110を追加する必要があります.11101111から4ビットを取得するには、11101111でビット単位の演算を実行する必要があります。
上位4ビットを取得するには、11101111を左から右へ。
*アドレス>> 4は: - *アドレス/ 16
内部コンパイラ*アドレス>> 4(*アドレス)/(2 POW 4)に変換に等しいです。
下位4ビットを取得するには、(* address)& 0x0fまたは(* address)%16を実行します。どちらの操作も下位4ビットを除くすべてのビットをクリアします。
printf(".....%d\n",(((*address)>>4) + ((*address)&0x0f)));
希望すると助かります。
2^4 = 16で除算することは、最後の4ビットをシフトオフすることと同じです。 – nneonneo
* a/16と* a%16のバイナリ結果を計算します。 –
一般的にバイナリと数値ベースについてもう少し学ぶべきです –