単語があるので、ループして左端のビットをテストします。私は単語を持っていて、それをサブルーチンに渡しています。ループを構築する方法は知っていますが、単語の左端のビットをテストする方法がわかりません。
助けてくれてありがとう
単語があるので、ループして左端のビットをテストします。私は単語を持っていて、それをサブルーチンに渡しています。ループを構築する方法は知っていますが、単語の左端のビットをテストする方法がわかりません。
助けてくれてありがとう
これを行う最善の方法は、ビット マスキングを使用することです。チェックする単語と、テストする任意の位置に 1 を含むビット マスクとの間でビットごとの AND を実行します。つまり、バイナリで:
my word: 11
bitmask: 10
& ==
10
左側の 1 がドロップアウトしていることがわかります。したがって、16ビットの数値で同様のことを行うには:
0x0230 & 0x8000 = 0x0000
0xC020 & 0x8000 = 0x8000 != 0x0000
ここで注意すべき重要なことは、ビットが存在しない場合、AND は 0 を返し、ビットが存在する場合は別のものを返すということです。それが何であれ、それがゼロではないということだけは問題ではありません。
それがあなたの特定のタスクに当てはまるかどうかはわかりませんが、単純なアプローチは、単語への論理/算術左シフトを実行することです。これは、単語をそれ自体に追加することで簡単に実行できます (これは、2 を掛けて、すべてのビットを左の 1 "スポットにシフトすることと同じです)。これを行った後、条件コードが設定されます (GPR を使用していると仮定します)。 ) そして、シフトされたワードが正またはゼロ (したがって、左端のビットは 0) または負 (したがって、左端のビットは 1) であるかどうかをチェックすることにより、左端のビットが 1 か 0 かをテストできます。このアプローチに従って単語全体をループすると、単語の各ビットの値を判断できるようになります。