0

現在、16 進数を 10 進数に変換するプログラムを作成しています。以下は私のコードです:

 public  class HexTest {
    public static void main (String [] args) {
         int z = 0xDeadCafe;
         System.out.println("z = " + z);
       }
    }

プログラムを実行すると、次のように表示されます。z = -559035650

0xDeadCafeただし、 16進数から10進数へのコンバーターを使用してテストすると、異なる結果が得られます3735931646。私のコードに何か問題があり、間違った結果が得られる可能性がありますか?

4

1 に答える 1

1

ここには何も問題はありません -int符号付きの型であり、値の最上位ビットが 1 ( D7 より大きいため) であるため、最終的に負の数になります。

符号なしの値を確認する最も簡単な方法は、long代わりに a を使用することです。

long z = 0xdeadcafeL;

Lこれを長いリテラルにする場合は、ここに注意してください。それ以外の場合は、intリテラルとして扱われ、次にa に変換されlongます。再び負の数として残されます。

別の方法は、整数リテラルを使用することですが、それを でマスクして0xFFFFFFFFL、負にせずに long に変換することです。

int z = 0xdeadcafe;
long x = z & 0xFFFFFFFFL;
于 2013-07-30T08:35:25.733 に答える