どのように動作し、そのすべてのJavaのバイトができている?
質問
Javaでは、あなければならないと思うか符号なしバイトになります。
かの低レベルのコードが制作に必要なものとのバイトとして符号なしの値より大き128の原因となるJavaの解釈としての負の数のMSBを使っている。
何が良いのか。(ちなJavaではないオプション)
解決
読み込み時に単一の値の配列からコピーのような短いか、またはint、手動で変換し、負の数の正の値です。
byte[] foobar = ..;
int value = foobar[10];
if (value < 0) value += 256 // Patch up the 'falsely' negative value
を行うことができ似変換を書く際には、配列になります。
他のヒント
では実際にできるようにif文にはまだのようです。
byte[] foobar = ..;
int value = (foobar[10] & 0xff);
このようにJavaな解釈のバイトとして、負の数とフリップの符号ビットの整数。
をint値は一般的によく使用shortでのjavaを用32ビットの値を内部でもかまいませんが、結局(にもバイトがない限り、配列)を用いintを避け不要の変換からshort値をbytecode.
あなたの最善の策は整数ではなくバイトになります。この部屋のための数より大き128オーバーヘッドのない、持をオブジェクトを置換バイトになります。
こもれる人々においてみ)
に最善の方法ビットの操作/符号なしバイトを利用 ints.もって署名されていたっぷりのスペアビット(32合計)として扱う符号なしバイトになります。また、すべての数学演するためには、小さい固定精度番号 int.例:
short a = 1s;
short b = 2s;
int c = a + b; // the result is up-converted
short small = (short)c; // must cast to get it back to short
このためでなければ大丈夫だと整数、マスクを得ることができたが、ビットえるべく取り組んでおります。例:
int a = 32;
int b = 128;
int foo = (a + b) | 255;
ここでは詳細情報をJavaプリミティブ型 http://mindprod.com/jgloss/primitive.html
最後にないが,ある符号なし固定精度の数値をJava.その char プリミティブ.
ごきげんよう、トメ子です非常に遅い応答があったこのスレッドがいとうございます。問題は、単に把握に努めると共に、場合には、Javaバイトは>127となります。
の簡単な解決方法には:
if((val & (byte)0x80) != 0) { ... }
場合には問題は128ではなく、追加で別の条件において本手法を用いることが決まいます。
思う短納します。ない非常に効率的なもののみオプションのほか一部の剛のための努力しています。