2016-11-24 9 views
0

addressアドレスに11101111が格納されているとします。最後の4ビットに最初の4ビットを追加するにはどうすればよいですか?Cでのビット演算

私の教授は私たちがこれを行うことができることを示しました(*address)/16 + (*address)%16しかし、なぜそれが動作するのか分かりません。誰かが、16の除算とモジュロがどこから来たのか説明できますか?

+0

2^4 = 16で除算することは、最後の4ビットをシフトオフすることと同じです。 – nneonneo

+0

* a/16と* a%16のバイナリ結果を計算します。 –

+0

一般的にバイナリと数値ベースについてもう少し学ぶべきです –

答えて

1

@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))); 

希望すると助かります。