11

1 バイトが 0 ~ 255 の数値を保持することを理解しています。また、16 ビットの数値は 0 ~ 65535 です。

2 つの別個の 8 ビット レジスタを使用して 16 ビットの数値を表現しようとしている場合、どうすればよいですか? 数学はどのように機能しますか?

ありがとう!

4

3 に答える 3

18

計算は次のようになります。

sixteenBitNumber = 256*upperByte + lowerByte;

シフトとビット単位の演算:

sixteenBitNumber = (upperByte<<8) | lowerByte;

ほとんどの CPU では、一部の古い 8 ビット CPU でも、この解釈はハードウェアで行われます。バイトを 16 ビット レジスタの一部にロードするか、16 ビット ペアとして機能する別の 8 ビット レジスタにロードします。単一の 16 ビット数値であるかのようにデータを処理します。

于 2012-06-01T17:10:24.053 に答える
2

10 進数で 7 と 9 を取って 79 を作るにはどうすればよいですか? (7*10)+9 それとも 12 と 34 で 1234 になりますか? (12*100)+34。0x12 と 0x34 に違いはなく、0x1234 になります。(0x12 * 0x100) + 0x34。ビット シフト (0x12 << 8 ) + 0x34 をよりクリーンにします。できますか、そうです (0x12<<8) | 0x34。

于 2012-06-01T20:55:42.050 に答える
0

彼らと一緒に働きたいですか?それは簡単です

基数 10 で 2643という数字があるとしましょう。半分に割ると26と43みたいになるよね?2 を掛ける場合、右から左に掛けてキャリーする必要があることはご存知でしょう。そうしてください - 右側を乗算し、オーバーフローがある場合は、それを左側に追加してから、左側を乗算します。

例えば:

(37 82) *2     ->     ((37*2) + overflow) + 64     ->     (74 + 1) 64     ->     75 64

それがどのように機能したか見てください。部門についても同じことが言えます - 運ぶ必要がありますか? 上位ビットから盗みます。数字を足したり引いたりしたいですか?結局のところ、それほど難しくありません!

2 進数も同じように機能します。

(01110110 10110011) * 10 = (0)     <-     1110110(1)     <-     01100110

基本的に、下限を計算してから上限を計算してから、オーバーフローを適用します。

于 2012-10-15T04:26:51.473 に答える