0

私は式を持っています:

short w = (short) ((byte) dana) << x);
...
String.format ("%04X", w);

それらが含まれている場合:

dana = (byte) 0x88;int x = 5;

0xF100 を受け取る

0x1100 の代わりに

ちゃんと作るにはどうしたらいいの!

4

3 に答える 3

1

この回答を確認してください: int から byte にキャストしてからビットシフト演算子を使用する方法

あなたは(拡張記号)で始まります

  1111 1111 1111 1111 1111 1111 1000 1000

そしてシフトを組む

  1111 1111 1111 1111 1111 0001 0000 0000

あなたがショートにキャストすると、あなたはで終わります

  1111 0001 0000 0000

これはあなたが得る結果です。

解決策はより広い値 (少なくともshort) を使用しているため、負にはなりません。zchの答えも有効です。

于 2013-10-23T12:58:14.260 に答える
1

問題は最初のキャストにあります:

(byte) dana

danaは に変換されるbyteため、後で式で使用するときは に拡大する必要がintあり、これは符号拡張で行われます。数値が負の場合、その値を 2 の補数に保つために、すべての上位ビットが 1 に設定されます。

代わりにビットマスクを使用してください:

short w = (short) ((dana & 0xff) << x);

shortいずれにせよ、Java はすべての演算を行うため、同様に使用しない方がよいでしょうint

于 2013-10-23T12:52:12.257 に答える