Java の int から byte への変換で予期しない負の値が生成されるのはなぜですか?
Java の不可解な整数からバイトへの変換: 符号なし値を理解する
開発者は Java のプリミティブ型を扱う際に、興味深い問題に頻繁に遭遇します。整数 (int) をバイト (byte) に変換するときの動作。以下のコード スニペットに示されているように、正の整数をバイトにキャストすると、予期せず、一見誤った負の値が返されます。
この単純なコードの出力が、予想される 132 ではなく -124 になるのはなぜですか?この謎を解明するために、Java のプリミティブ型の複雑さと、符号付き値と符号なし値の内部表現を詳しく調べます。
Java の符号付き型と符号なし型を理解する
Java の int、byte、short、long などのプリミティブ型は符号付きです。つまり、正の値と負の値の両方を表すことができます。これらの型は 2 の補数表記を利用し、最上位ビット (MSB) が数値の符号を決定します。 MSB が 0 の場合、数値は正です。
ビット単位 AND
の役割 混乱を解決し、バイトの真の符号なし値を明らかにするために、ビット単位の演算を使用します。具体的には、ビットごとの AND 演算子 (「&」) を、通常は 0xff で表されるビットマスクとともに利用します。ビットマスクは、整数の下位 8 ビットのみが保持されるようにし、符号ビットを効果的に削除します。
上位ビットをマスクすることで、バイトの元の符号なし値を分離し、それが元の符号なしの値であることを明らかにします。確かに正の値 (この場合は 255) です。
変換の影響
Java が int をバイトに変換するとき、左端の 24 ビットが切り捨てられます。下位8ビットのみ。これらの残りのビットの解釈は、符号ビットの存在によって異なります。符号ビットが 1 (負) の場合、Java は値が負であるとみなし、残りの 7 ビットを反転します。ただし、符号ビットが 0 (正) の場合、残りのビットは符号なしの値として読み取られます。
結論
Java のプリミティブ型の符号付きの性質を理解することでビットマスクの役割を理解することで、int をバイトに変換するときに観察される一見奇妙な動作をわかりやすく説明できます。この知識により、開発者はデータを正確に操作および解釈できるようになり、Java コードが意図したとおりに実行されるようになります。
以上がJava の int から byte への変換で予期しない負の値が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...
