Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java TIPS
  4. Javaのビット演算とは?概要や使い方をサンプルコードを用いてご紹介します

Javaのビット演算とは?概要や使い方をサンプルコードを用いてご紹介します

  • Java TIPS
公開日時:   更新日時:
Javaのビット演算とは?概要や使い方をサンプルコードを用いてご紹介します
この記事でわかること
    システム
    エンジニア
    ビット演算とはどのようなことなのでしょうか。
    プロジェクト
    マネージャー
    数値を2進数表記にして、ビットごとに計算することを言います。ビットとは2進数の各桁のことです。

    ビット演算とは?


    ビット演算とは、数値を2進数表記にして、ビットごとに計算することを言います。ビットとは2進数の各桁のことです。

    ビット演算にはいくつかの種類があり、演算子と呼ばれる記号でビット演算の種類を表します。例えば、論理積のビット演算は「&」という記号を使用し、論理和のビット演算は「|」という記号を使用します。

    ビット演算の種類


    ビット演算には次のような種類があります。

    1.論理積(演算子の記号は「&」)
    2.論理和(演算子の記号は「|」)
    3.排他的論理和(演算子の記号は「^」)
    4.反転(演算子の記号は「~」)
    5.左シフト(演算子の記号は「<<」)
    6.符号あり右シフト(演算子の記号は「>>」)
    7.符号なし右シフト(演算子の記号は「>>>」)

    ビット演算の方法


    ビット演算を行うためには、数値を2進数置き換えて考える必要があります。2進数に置き換えた後、ビットごとに計算します。

    以降にビット演算の方法について説明します。

    論理積(演算子の記号は「&」)

    ビット演算の論理積は、2つの数値の同じ位置にあるビットを比較し、どちらも「1」である場合だけ計算結果が「1」になります。それ以外の場合は「0」になります。

    例えば、2つの数値「10」と「12」の論理積の演算は次の通りです。

    両方が「1」である桁だけ「1」となり、それ以外は「0」になります。演算結果は「8」となります。

    Javaコードのサンプル例

    論理積のJavaコードサンプル例です。

    Javaコードで出力された結果は、「5」となります。

    論理和(演算子の記号は「|」)

    ビット演算の論理和は、2つの数値の同じ位置にあるビットを比較し、どちらかが「1」または両方が「1」の場合に計算結果が「1」になります。どちらも「0」の場合は計算結果が「0」になります。

    例えば、2つの数値「10」と「12」の論理和の演算は次の通りです。

    どちらかが「1」または、両方が「1」である桁が「1」となり、両方とも「0」である桁が「0」になります。演算結果は「14」となります。

    Javaコードのサンプル例

    論理和のJavaコードサンプル例です。

    Javaコードで出力された結果は、「95」となります。

    排他的論理和(演算子の記号は「^」)

    ビット演算の排他論理和は、2つの数値の同じ位置にあるビットを比較し、値が異なる場合に計算結果が「1」、値が同じ場合に計算結果が「0」になります。

    例えば、2つの数値「10」と「12」の排他論理和の演算は次の通りです。

    値が異なる桁が「1」となり、値が同じ桁が「0」になります。演算結果は「6」となります。

    Javaコードのサンプル例

    排他的論理和のJavaコードサンプル例です。

    Javaコードで出力された結果は、「90」となります。

    反転(演算子の記号は「~」)

    ビット演算の反転は、数値の各ビットが「0」の場合は「1」に、「1」の場合は「0」に変換します。

    例えば、数値「10」の反転の演算は次の通りです。

    各ビットにおいて「0」と「1」を入れ替えます。演算結果は「5」となります。

    Javaコードのサンプル例

    反転のJavaコードサンプル例です。

    Javaコードで出力された結果は、「-86」となります。

    左シフト(演算子の記号は「<<」)

    ビット演算の左シフトは、数値をビット単位で左にずらします。

    例えば、数値「10」を左シフトで1ビットずらす演算は次の通りです。

    数値「10」を左シフトで2ビットずらした場合は次のようになります。

    数値「10」を左シフトで5ビットずらした場合は次のようになります。

    このように左シフトしたときに右入ってくる数値は「0」です。左から出て行った数値は切り捨てられます。また、左シフトで1ビットずらすと値が2倍になるという法則性があります。

    Javaコードのサンプル例

    左シフトのJavaコードサンプル例です。

    Javaコードで出力された結果は、「84」となります。

    符号あり右シフト(演算子の記号は「>>」)

    ビット演算の符号あり右シフトは、数値をビット単位で右にずらします。

    例えば、数値「10」を右シフトで1ビットずらす演算は次の通りです。

    数値「10」を右シフトで2ビットずらした場合は次のようになります。

    数値「10」を右シフトで5ビットずらした場合は次のようになります。

    数値「-10」を右シフトで5ビットずらした場合は次のようになります。「-10」は2進数で表すと「1111 0110」です。

    このように右シフトしたときに左入ってくる数値は最上位ビットが「0」だった場合は「0」が入り、最上ビットが「1」だった場合は「1」が入ります。右から出て行った数値は切り捨てられます。

    また、符号あり右シフトでは、1ビットずらすと値が1/2になるという法則性があります。

    Javaコードのサンプル例

    符号あり右シフトのJavaコードサンプル例です。

    Javaコードで出力された結果は、「5」となります。

    次に最上位ビットが「1」(マイナス値)だった場合の例です。

    Javaコードで出力された結果は、「-23」となります。

    符号なし右シフト(演算子の記号は「>>>」)

    ビット演算の符号なし右シフトは、数値をビット単位で右にずらします。

    例えば、数値「10」を右シフトで1ビットずらす演算は次の通りです。

    数値「10」を右シフトで2ビットずらした場合は次のようになります。

    数値「10」を右シフトで5ビットずらした場合は次のようになります。

    数値「-10」を右シフトで5ビットずらした場合は次のようになります。「-10」は2進数で表すと「1111 0110」です。

    このように右シフトしたときに左入ってくる数値は必ず「0」です。右から出て行った数値は切り捨てられます。

    Javaコードのサンプル例

    符号なし右シフトのJavaコードサンプル例です。

    Javaコードで出力された結果は、「5」となります。

    次に最上位ビットが「1」(マイナス値)だった場合の例です。

    Javaコードで出力された結果は、「1073741801」となります。

    システム
    エンジニア
    ビット演算の種類や方法などについて理解できました。
    プロジェクト
    マネージャー
    この機会に基本となるビット演算について学んでおきましょう。

    Javaでのビット演算とは?【まとめ】


    今回は、ビット演算についての概要とJavaコードのサンプル例を説明してきました。

    ビット演算にはいくつかの種類があり目的に沿ったものを使用しましょう。例えば、ネットワークのIPアドレスを、サブネットマスクを用いてネットワーク部とホスト部に分ける場合などは、論理積、論理和といったビット演算を使用します。

    ビット演算は基本となりますので、是非使いこなせるようにしておきましょう。

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job