ホームページ Java &#&チュートリアル Java の int から byte への変換で予期しない負の値が生成されるのはなぜですか?

Java の int から byte への変換で予期しない負の値が生成されるのはなぜですか?

Nov 07, 2024 pm 06:11 PM

Why Does Java's int to byte Conversion Produce Unexpected Negative Values?

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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

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

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

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

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

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

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

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

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

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

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

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

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

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

データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? Apr 19, 2025 pm 09:51 PM

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

See all articles