2017-05-03 1 views
0

誰かが、私たちが式を使用することができ、Javaの符号なしバイトに符号付きバイトを変換することを私に言った式unsignedByte = signedByte> = 0を使用して符号付きバイトを符号なしバイトに変換しますか? signedByte:256 + signedByte;

int unsignedByte = signedByte >= 0 ? signedByte : 256 + signedByte; 

しかし、例えば、私は-128から1(バイト値の範囲のsignedByte値を持っている場合〜127)、この式を使用するので、1 >= 0trueと評価されます。したがって、最初の式が使用され、1 + 1となり、これは2に等しくなります。しかし、私はunsignedByteで129で表される同じ数字を期待していた?

私の理解に間違っていますか、この数式は間違っていますか?

実際の符号付きの値と符号なしの値を使用した例をお待ちしております。

答えて

1

あなたはそうのようなビット単位のAND演算子を使用することができます。

int unsignedByte = signedByte&255; 

基本的に、これは順番に、それは(0インデックス の31)は、より高いビットへの負のかどうかを指示ビットを変更する許可された空間を増大させ

int unsignedByte = 
    signedByte >= 0 ? 
     signedByte // you get this 
     : 256 + signedByte; // or this 

なく

1

あなたは三項演算子を誤解します
int unsignedByte = 
    (signedByte >= 0 ? signedByte : 256) 
    + signedByte; 
+0

したがって、signedByte> = 0の場合、int unsignedByte = 1と評価されます。しかし、私はint unsignedByteは129と等しいと思った? – Thor

+2

* "unsignedByte = 1?しかし、私はint unsignedByteは129と等しいはずだと思いましたか?" *いいえ、間違っています。 https://en.wikipedia.org/wiki/Two%27s_complement –

+1

ちょうど安全であるように、 '256 + signedByte'を常に括弧でくくって、疑いの余地をなくすことができます。 –

関連する問題