2012-06-10 15 views
7

私はビットごとの演算子について非常に基本的な知識があります。私は値がどのように割り当てられるかを理解することができない。誰かが私を正しい方向に向けることができれば、私はとても感謝しています。16進値はビット単位でどのように操作されますか?

マイ六角住所:0xE0074000

進値:3758571520

バイナリ値:11100000000001110100000000000000

私はシンプルなマイクロコントローラをプログラムし、Microsoftに登録するアクセスクラスを使用しようとしています。 Net Micro Frameworkを使用して、コントローラが自分の望むことを実行できるようにします。

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

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

誰かが正しい方向に私を指すことができるなら、私は非常に素晴らしいだろう。

答えて

9

最初は小数点以下を忘れてしまいます。後でそれに戻ります。

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

さて、バイトのためには、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

ようなビットセット内0x0000000 バイナリ番号%10000000の場合は、0x0000000の値を持っています。実際には10進数ですが、10進数も忘れてしまいます。

これはオンになっている#7ビットです。それは

最大あなたが得ることができる(16進バイトの各部分は、いくつかのオタクでニブルと呼ばれている)「ニブル」でそれらを合計する0x80の

だから、あなたがしなければならないすべてはあるの進値を持っていますニブルにヘクスにニブル= F(4ビット)(15進)

上の0x10 +の0x20 + 0x40の+は0x80 = 0xF0が=バイナリ%11110000の

ので、すべての光として(10進数)15またはFであります

は同じように下位ニブルになります。

パターンが表示されますか?

+0

ですべてを割る整数のようですはい、私は、この部分がどのように動作するかの優れた説明に感謝を参照してください!したがって、000011001000の値を持ち、これを行うと(8 << 1)、000111001000が残されます。これは正しいですか? –

+0

したがって、バイナリの1と0の配列が32ビットの長さで、8ビットを1ずつシフトしたければ、1つの値を変更できますか?例:bin [7] = 1; ?? –

+0

さらに進んで、これをやりたければ(8 << 3)これは正しいでしょう:bin [7] = 1; bin [8] = 1; bin [9] = 1; ? –

3

シフトが何であるか@BerggreenDKの答えを参照してください。ここでは、16進数で何かについての情報があります(同じこと、ちょっと違う表現):

シフトは非常に単純な概念です。レジスタのサイズは固定されており、フィットしないビットがあれば最後まで落ちます。したがって、この例を取る:六角で

int num = 0xffff << 16;

をあなたの変数は今0xffff0000だろう。右端がゼロでどのように埋められているかに注意してください。さあ、もう一度シフトしましょう。

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

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

トリック:1による左シフトは1で2で数を乗算し、右シフトのような2

+0

問題はBitwise演算子にありません。この問題は、クラスにあり、クラスがどのように情報をレジスタアドレスに割り当てるかです。だからこの場合:Register.SetBits((3 << 8)); //レジスタのビットを操作する... ビットはどのように割り当てられますか?どのようにビットを操作するのかをレジスタがどのように知っていますか?データシートからビット3の値を1に設定する必要があることがわかっている場合、これを行うには正しいビット単位の演算をどのようにしたらよいでしょうか? –

+0

URLリンク:[登録クラスのドキュメント](http://www.ghielectronics.com/downloads/NETMF/Library%20Documentation/html/73f12956-6a7d-d693-6db8-4ec605c50f2d.htm)ドキュメントへのリンク。その短いと私に答えを与えることはありません。 –

+0

Ok、Eureka Moment、マスクの値1のビットがレジスタに設定されます。マスクの値0のビットは変更されません。したがって、値をレジスタに割り当てる前に、バイナリ値を設定して設定する必要があります。したがって、0010011(0)11を角カッコで設定したい場合は、このBITを設定するために0100のバイナリを解析する必要があります。ついにウーホー! –

関連する問題