ホームページ  >  記事  >  Java  >  Java 整数をバイトにキャストすると、132 であるのに -124 になるのはなぜですか?

Java 整数をバイトにキャストすると、132 であるのに -124 になるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 10:29:03568ブラウズ

Why Does a Java Integer Cast to a Byte Result in -124 When It's 132?

型変換における Java の奇妙な動作: -124 の謎を明らかにする

Java で整数をバイトに代入しようとすると、興味深い観察が生じます。整数値 132 は、バイトにキャストされると -124 としてレンダリングされます。この謎めいた結果は、最初は不可解に見えるかもしれません。

2 の補数パズルの探索

この謎を解明するには、Java の基本的なデータ型とその表現を詳しく調べることが重要です。 Java では、int や byte などの整数型は、2 の補数表記を使用して署名されます。この表記では、最上位ビットが符号を表し、数値がより大きなビット サイズに拡張されてもその値が最上位ビットとして保持されます。

符号なしの至福の追求

ほとんどのシナリオでは、バイトを符号なしの値として解釈し、符号情報を破棄することが望ましいです。これはビット単位の演算によって実現できます。たとえば、マスク 0xff を使用したビット単位の AND を符号付きバイトに適用すると、符号ビットが効果的に削除され、符号なしの値が明らかになります。

解明されたマスク解除の儀式

プロセスは次のように展開されます:

  1. 符号付き整数としてのバイト: バイナリで 11111111 として表される符号付きバイトを考えます。 Java はこれを -1 として解釈します。
  2. マスク付きビット単位 AND: 0xff を使用してビット単位 AND 演算を適用すると、符号ビットがマスクされ、バイナリで 00000001 が得られます。
  3. 変換された整数: Java は、マスクされた値を符号なし整数 (10 進数表現では 1) として解釈します。

この手法により、符号付き整数から符号なしバイト値をシームレスに抽出できます。

結論

Java の int から byte への変換では、基礎となる 2 の補数表記により、微妙だが興味深い動作が導入される可能性があります。これらのニュアンスを理解することは、予期しない -124 出力の背後にある謎を解明するのに役立ち、開発者が Java アプリケーションでデータ型を効果的に操作できるようになります。

以上がJava 整数をバイトにキャストすると、132 であるのに -124 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。