LSBとMSBにいくつかの値を含む16ビットレジスタがあります。
LSB:
ビット0 ... 1では値は0
ですビット2では値は0です
MBS:
MSBでは値20を書き込む必要があります
したがって、レジスタに書き込む必要のある値は0 + 0 + 20 = 160です。
私がレジスターを読んでいるとき、私はこの方法でそれをやっています:
ビット[0 ... 1]の最初の値の場合:
firstVal = (valFromReg & (((1 << 2)-1) << 1) / 2)
secondVal = (valFromReg & 4) / 4
しかし、3番目の値を読み取って変換して数値20を取得するにはどうすればよいですか?
Javaでは、ashort
は(符号付き)16ビット値です。これを3つの値に分割します。
a
はビット0〜1の2ビット値ですb
はビット2の1ビット値ですc
は、ビット3〜15の13ビット値です。ビット単位では、次のように表すことができます。 cccc cccc cccc cbaa
16ビット値から3つの値を抽出するにはreg
、次のようにします。
short reg = /*register value*/;
int a = reg & 0x0003;
int b = (reg >> 2) & 0x0001;
int c = (reg >> 3) & 0x1fff;
逆にするには、次のようにします。
short reg = (short)((c << 3) | (b << 2) | a);
もちろん、これは、値が値の範囲内、つまりa = 0-3、b = 0-1、およびc = 0-8191であることを前提としています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加