2012-03-27 28 views
-1

C++を使用すると、intは「符号付き」から「符号なし」に変換されます。符号なしの符号付き変換をJavaで逆

Javaを使用して、この「符号なし」のintを「符号付き」に変換することはできますか。

符号付きの値(-3)は、C++を使用して符号なし(65533)に変換されます。

がどのように私は符号なし(65533)値バック変換することができます署名(-3)事前にJavaの

感謝を使用。

Prav

+0

何あなたはそれで達成したいですか? –

+0

65533はJavaで許容される符号付きint値です – ControlAltDel

+0

実際の符号付き値が戻ってくる必要があります。私のインターフェースではJAVA言語を使用しています。 – praveen

答えて

2

私が正しく質問を理解していれば、あなたは

int value = 65533; 

のようないくつかの値を持っていて、それが解決策が本当にあるために符号付き16ビット整数として扱われることを望みます本当に簡単:

short signed = (short) value; // -3 
+0

これは文字列を受け入れませんか? –

+0

はい、はい。それは本当にすべてのプリミティブ型が常に署名されているので、私がJavaで想像できる符号なしの値の唯一のソースです。 –

+0

私はあなたがその質問を誤解したと思う。彼は外部のC++プログラムを持っていて、彼のために16ビット値を打ち破っています。今では、16ビットの符号なし整数を符号付き整数として再解釈する必要があります(もちろん、どちらもJavaでは 'int'sとして表現されます)。 –

1

次を使用することができます。

if (a > 32767) a -= 65536; 
+2

'0x7fff'と' 0x10000'は少しランダムではありません。 –

0

C++のintは通常32ビットですが、あなたは-365533ということで、intは16ビットです。ほとんどの人は16bit intをshort(int)とみなします

Javaのint/Integerは常に32ビットです。

符号付きshort int:-3をunsigned short intに変換する場合、ちょうど65533が得られます。これはビットa nopに関するものです。 Javaでは

は、ちょうどあなたが符号付き整数を解釈し、符号なしの2バイト整数としてそれを表現するためにC++を使用

int i = 65533; // or other values from unsigned short int 

if (i >= (1<<15) { 
    i -= 1 << 16; 
} 
0

を行います。

バックのみ表現が2バイトの整数であることを前提として動作するようにして、符号拡張ビットバックまたは-INGのことで(警告を、これが未検証である)以下は、動作するはず:

int number = 65533; 

// check sign bit for 2-byte integer, add in sign bits for 4 byte integer if set 
int signedNumber = (0 == (number & 0x8000)) ? number : (number | 0xFFFF0000); 
関連する問題