Java では、int は 32 ビット、long は 64 ビットで表現されます。これら 2 つの基本的な型は整数であり、他の表現方法はありません。彼らは自分の内面をどのように表現しているのでしょうか? 2の補数コードで表されます。問題を解く際に Java のビット演算に遭遇することが多いため、Java のビット演算は int 型とlong 型にのみ使用できます。したがって、Java が内部的にバイナリによってどのように表現されるかを分析する理由があります。ここでは例として int のみを取り上げますが、long も同じです。
1. Java 内部では int
int の範囲は 32 ビットで表現され、最上位ビットが記号を表すため、実際に表現できる数値は31ビットです。 Java の int 型の値の範囲は -2^31~2^31-1 です。
なぜこのような範囲になっているのでしょうか?これにはバイナリ保存方法が関係します。
Java では、int を格納するために 2 の補数が使用されます。正の数の場合、その補数はそれ自体です。たとえば、4 ビットを例に挙げてみましょう。正の数 1 ~ 7 は、それぞれ 0001,0010 です。 。 。 , 0111、合計7つの数字、つまり2^3-1です。
0 の場合、問題が発生していることがわかります。 -0 または 0 のいずれも 0 です。 0 をどのように表現するか決めますか?補数コードの法則では、0 は 0 であるとみなされるため、0 は 0000 で表されます。
このとき、負の数を表現する必要があります。負の数の補数表現は、その絶対値の反転 (符号ビットとともに反転) に 1 を加えたものであると考えられます。たとえば、-5 の場合、絶対値は 5 であり、0101 と表現されます。反転すると 1010、プラス 1 を加えると 1011 となります。これは、-5 の補数表現です。
現時点では、1000 は -8 を表すために使用できるため、負の数値の範囲は -2^31 となり、これは int の値の範囲も説明します。 64 ビット長についても同様です。
2. Java のビット演算
Java のビット演算はどのように実行されるのでしょうか?シフト操作は、数値全体を左または右に移動することに注意してください。左にシフトすると、下位ビットは 0 で埋められます。右に移動すると、2 つの状況が考えられます。 0 と正の数の場合、上位ビットは 0 で埋められます。負の数の場合、上位ビットは 1 で埋められます。たとえば、-5 は 1011 で、右に 1 桁シフトすると 1101、つまり -3 になります。
ちょっとした操作もあります。ビット単位の演算の場合は、符号ビットも関与する必要があることに注意してください。
3. 右シフトと除算の関係
正の数 (もちろん 0 の場合も) の場合、右に 1 位置シフトすることは、 2 で割った結果ですが、正の数の場合です。負の数の場合はありません (正確には 2 -1 で割った結果)。たとえば、-5/2 の場合は -2 になり、-5>>1 の場合は -3 になります。
4. 正負の符号と整数の除算・剰余演算の関係
正の数/正の数は切り捨て
負の数/負の数は絶対値を除算することに等しい
正/負の数および負/正の数は、絶対値に負の符号を掛けて除算することに等しい。
% の結果については、結果の絶対値は絶対値の法と同じですが、符号は最初の数値によって決まります。
5. なぜ補完コードを使用するのでしょうか?
(1) 前述したように、0 と -0 を合理的に表現するには;
(2) 負の数を負の数でもう 1 つ表現できます;
(3) 補数コードを使用することで、符号ビットとその他のビットを一律に処理できると同時に、減算も加算として処理できます。また、2の補数で表現された2つの数値を加算する際、最上位ビット(符号ビット)に桁上げがあった場合、その桁上げは破棄されます。
実は、大きな理由は足し算や引き算の計算を容易にするためです。演算に 2 の補数系を使用する場合、符号ビットを加算して演算できます。ビット演算では、符号ビットにキャリーがある場合、ビット範囲を超えているため破棄できます。正の数とその加算については特別なことは何もありません。以下の例はすべて 8 ビットです。たとえば、7 7 (00000111 00000111) の場合、結果は 00001110 (14) になります。
引き算の場合、たとえば 9-4 は 9 (-4) であると考えます。まず、00000100 である 4 を反転し、1 を加算して -4 の補数を取得します。これは 11111100 を表します。つまり、
00001001(9)
11111100(-4)
? 100000101
最後の符号のキャリーbit は 1 です。ビット範囲を超えているため、直接破棄して、直接 5 を取得します。つまり、これは引き算が足し算に変わることの実現です。
以上がJava intとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。

Javaのパフォーマンスはハードウェアアーキテクチャと密接に関連しており、この関係を理解することでプログラミング機能を大幅に改善できます。 1)JVMは、CPUアーキテクチャの影響を受けるJITコンピレーションを介して、Java Bytecodeを機械命令に変換します。 2)メモリ管理とゴミ収集は、RAMとメモリバスの速度の影響を受けます。 3)キャッシュとブランチ予測Javaコードの実行を最適化します。 4)マルチスレッドと並列処理がマルチコアシステムのパフォーマンスを改善します。

ネイティブライブラリを使用すると、これらのライブラリはオペレーティングシステムごとに個別にコンパイルする必要があるため、Javaのプラットフォームの独立性が破壊されます。 1)ネイティブライブラリはJNIを介してJavaと対話し、Javaが直接実装できない機能を提供します。 2)ネイティブライブラリを使用すると、プロジェクトの複雑さが増し、さまざまなプラットフォームのライブラリファイルの管理が必要です。 3)ネイティブライブラリはパフォーマンスを改善できますが、それらは注意して使用し、クロスプラットフォームテストを実施する必要があります。

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









