13

私はビット演算子について非常に基本的な知識を持っています。しかし、値がどのように割り当てられているのか理解できません。誰かが私を正しい方向に向けることができれば、私はとても感謝しています。

私の16進アドレス:0xE0074000

10進値:3758571520

バイナリ値:11100000000001110100000000000000

単純なマイクロコントローラーをプログラムし、Microsoft .Net Micro FrameworkのRegisterアクセス​​クラスを使用して、コントローラーに必要な処理を実行させようとしています。

Register T2IR = new Register(0xE0074000);
T2IR.Write(1 << 22);

上記の例では、バイナリ表現のビットはどのように移動されますか?ビットの管理がバイナリ形式のアドレスにどのように割り当てられているのかわかりません。

誰かが私を正しい方向に向けることができれば、私はとても素晴らしいです。

4

2 に答える 2

17

開始のための小数を忘れてください。後で戻ってきます。

まず、HEXとBINARYの間のロジックを確認する必要があります。

さて、1バイトに対して8ビット(#7-0)があります

#7 = 0x80 = %1000 0000
#6 = 0x40 = %0100 0000
#5 = 0x20 = %0010 0000
#4 = 0x10 = %0001 0000

#3 = 0x08 = %0000 1000
#2 = 0x04 = %0000 0100
#1 = 0x02 = %0000 0010
#0 = 0x01 = %0000 0001

これをバイナリで、バイトで、このように読むと%00001000

次に、ビットセットは右から4番目のビット#3で、値は08 hexです(実際には10進数ですが、16進数/ 2進数を計算するときは10進数を忘れてください)。

2進数が%10000000の場合、これはオンになっている#7ビットです。それは0x80の16進値を持っています

したがって、あなたがしなければならないのは、それらを「ニブル」に合計することです(16進バイトの各部分は、一部のオタクによってニブルと呼ばれます)

ニブルで取得できる最大値は(10進数)15またはFで、0x10 + 0x20 + 0x40 + 0x80 = 0xF0 =バイナリ%11110000です。

したがって、ニブルのすべてのライト(4ビット)= 16進数のF(10進数の15)

下のニブルについても同じことが言えます。

パターンが見えますか?

于 2012-06-10T22:39:14.950 に答える
7

シフトとは何かについては、@BerggreenDKの回答を参照してください。これが16進数でどのようになっているのかについての情報です(同じこと、ただ異なる表現):

シフトは非常に簡単に理解できる概念です。レジスタは固定サイズであり、収まらないビットはすべて終了します。したがって、この例を見てください。

int num = 0xffff << 16;

16進数の変数はになります0xffff0000。右端がゼロで埋められていることに注意してください。さて、もう一度シフトしましょう。

num = num << 8;
num = num >> 8;

num0x00ff0000です。古いビットを取り戻すことはできません。同じことが右シフトにも当てはまります。

トリック:1を左にシフトすることは、数値に2を掛けるようなものであり、1を右にシフトすることは、すべてを2で割る整数に似ています。

于 2012-06-10T23:50:36.753 に答える