国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる Java のビット操作とアプリケーション シナリオの概要

Java のビット操作とアプリケーション シナリオの概要

Mar 08, 2021 pm 04:32 PM
java ビット演算 アプリケーションシナリオ

Java のビット操作とアプリケーション シナリオの概要

プログラム內のすべての數値はコンピューター メモリにバイナリ形式で格納されており、ビット操作はメモリ內の整數のバイナリ ビットを直接操作することを知っています。たとえば、and 演算は本來論理演算子ですが、整數同士でも AND 演算を行うことができます。

ビット演算には主にシフト演算と論理演算があります。次に、シフト演算と論理演算についてそれぞれ説明します。

シフト演算:

左シフト: 演算子は << で、左に移動し、右側の下位ビットに 0 を追加し、左側の上位ビットを破棄して処理します。バイナリを整數として表す場合、1 ビット左にシフトすることは 2 を乗算することと同じです。符號なし右シフト: 演算子は >>> で、右に移動し、右側を破棄し、左側に 0 を追加します。符號付き右シフト: 演算子は >> で、右に移動し、右側を破棄します。左側に追加される値は、元の最上位ビットによって決まります。元が 1 の場合は 1 を追加し、0 の場合は 1 を追加します。 、0 を追加します。バイナリを次のように考えてください。整數の場合、それを 1 ビット右にシフトすることは、2 で除算することと同じです。

例:

int a = 4; // 100
a = a >> 2; // 001,等于1
a = a << 3 // 1000,變?yōu)?

論理演算には次のものが含まれます:

  • ビットごとの AND&: 両方のビットが 1 から 1 になる

  • ビットごとの OR|: 1 つのビットが 1 である限り、1 です

  • ##ビットごとの否定~: 1 は 0 になり、0 は 1 になります

  • bitwise アプリケーション シナリオ:

    シナリオ 1: パリティの決定
分析: 奇數は 2 の整數倍ではありません。バイナリに変換した後、最下位ビットは 1 でなければならず、その逆はは偶數の場合に當てはまります。この機能を使用すると、ビット操作を通じて整數のパリティを簡単に決定できます。

コードを見てください:

int a = ...; 
a = a & 0x1 // 返回0或1,就是a最右邊一位的值。
a = a | 0x1 //不管a原來最右邊一位是什么,都將設為1

シナリオ 2: 正の整數が 2 の整數乗であるかどうかを判斷します。

分析: まず、一般的な 2 の整數乗を見てみましょう。數字: 2、4、8、16 を 2 進數に変換すると、10、100、1000、10000 になります。パターンは見つかりましたか?つまり、1 である最初のビットを除いて、他のビットはすべて 0 です。これらの數値から 1 を引いた後、ビットごとの反転の結果が等しくなるのは偶然です。たとえば、8-1=7 (2 進數で 111) は、8 の 2 進數 1000 をビットごとに反転することで得られます。そして 8&7=0 の場合、ルールを抽出すると次のようになります。

   int i = 1;// 二進制存儲方式為00000000000000000000000000000001
    int j = 5;// 二進制存儲方式為00000000000000000000000000000101
    int k = 6;// 二進制存儲方式為00000000000000000000000000000110
    if ((i & j) == 1) {
      System.out.println("j的最低位為1,為奇數");
    }    if ((i & k) == 0) {
      System.out.println("k的最低位為0,為偶數");
    }

このルールに適合する n は 2 の整數乗です。

(學習ビデオ共有:

java ビデオ チュートリアル

)

シナリオ 3: 単純なコレクション処理

ナンセンスではありません。コードを見てください:

(n&(n-1))==0
テストします:
public class SimpleSet {  public static final int A = 0x01;// 最后四位為0001
  public static final int B = 0x02;// 最后四位為0010
  public static final int C = 0x04;// 最后四位為0100
  public static final int D = 0x08;// 最后四位為1000
  private int set = 0x00;// 初始0000,空集合
  public void add(int i) {// 將i對應位的值置為1,重復add不影響。默認傳入值為ABCD之一,此處省去邊界判斷
    set |= i;
  }  public boolean contain(int i) {// 判斷相應位置是否為1
    return (set & i) == i;
  }  public boolean remove(int i) {// 來不及不解釋了快看代碼
    if (contain(i)) {
      set -= i;      return true;
    } else {      return false;
    }
  }
}

出力は次のとおりです:

 public static void main(String[] args) {
    SimpleSet set = new SimpleSet();
    System.out.println(set.contain(A));
    set.add(B);
    System.out.println(set.contain(A));
    System.out.println(set.contain(B));
    set.add(A);
    set.add(C);
    System.out.println(set.contain(A));
    set.remove(A);
    System.out.println(set.contain(A));
    System.out.println(set.remove(A));
    System.out.println(set.contain(C));
  }
わかりました、問題ありません。

上記のコード例の A、B、C、D は列挙型に似ていると思われるかもしれません。実際、列挙型の jdk ソース コードにあるコレクション クラス EnumSet は同様のソリューションを使用しています。これよりもはるかに複雑です。興味がある場合は、ソース コードを確認してください。このソリューションには、ビット ベクトルと呼ばれる名前が付いています。

ちなみに、Java の int のパッケージングクラスである Integer にはビット演算を提供する靜的ツールが多數あり、非常に複雑なものが多いので、興味のある方は覗いてみてください。

結論:

ビット演算はコンピュータが最も得意とする演算であり、jdkのソースコードにも多用されており、これを理解することでコンピュータをより深く理解することができ、また、よりエレガントなコードを書くのにも役立ちます。

関連する推奨事項:

Java 入門チュートリアル

以上がJava のビット操作とアプリケーション シナリオの概要の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

ネットワークポートとファイアウォールの理解 ネットワークポートとファイアウォールの理解 Aug 01, 2025 am 06:40 AM

ネットワークポートアンドファイアワルクトグテルトエナブルコマニケーションwhiledensuringsecurity.1.networksarevirtualendpointsnumbered0–655 35、withwell-knownportslike80(http)、443(https)、22(ssh)、および25(smtp)識別pecificservices.2.portsoperateovertcp(信頼できる、c

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを実行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを実行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數が戻る前に指定された操作を実行するために使用されます。パラメーターは、延期時にすぐに評価され、関數は最後のファーストアウト(LIFO)の順に実行されます。 1.複數の債務は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles