2016-10-02 6 views
0

さまざまなタイプのコンバージョンに問題があります。 私のコードでは、バイトを使用して整数に変換して、整数から種類の記憶域にxビット分書き込むことができるようにしようとしています。バイトをJavaの整数として再解釈するにはどうすればよいですか?

問題は、負の数をバイトとして整数に変換すると、ビット表現の整数がすべて1に設定されていることです。 したがって、たとえば10ビットを保存しようとすると整数から、期待したように先頭のビットを0ではなく1にします。

ビット表現を同じに保ちながら、バイトを整数として再解析する方法はありますか?私は整数の実際の数値を気にする必要はありません。

私はこの問題を防止する符号なしの値を持つことに慣れていましたが、現在は符号付き整数に制限されているJavaでこれを処理する方法が失われています。

例:

/* 
    decimal: -28 
    as byte: 11100100 
    as integer: 11111111111111111111111111100100 
    needed/expected integer: 00000000000000000000000011100100 
*/ 
import java.util.*; 
import java.lang.*; 
import java.io.*; 

class MyClass 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     System.out.println(Integer.toBinaryString((byte)-28)); 
    } 
} 

https://ideone.com/VE960u

+0

ビット表現を同じに保ちたいが、数値は気にしないということはどういう意味ですか?彼らは同じことです。 – Zarwan

+0

"ビット表現を同じに保ちながらバイトを整数として再解釈する方法はありますか?"ビット表現を同じに保つように操作しようとしている操作を直観的に考えるかもしれませんが、実際はそうではありません。 intには、バイトにはちょうどないビットがあり、そのビットにゼロを埋め込むことは、符号拡張以外は「ビット表現を同じに保つ」ことではありません。 – user2357112

+0

@ザワンアイデアは、バイトに設定されている整数に設定されたビットだけを保持することです。これが行われると、整数の数値/解釈はバイトとは異なります。 – Rochet2

答えて

2
yourInt = yourByte & 255; 

だけ望ましくないビットをマスク。

関連する問題