C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で数値のK番目の最下位ビット(LSB)を出力する方法

この記事では、与えられた整数 nk 番目の最下位ビット(LSB:Least Significant Bit)を求めて出力する方法を、C++のコード例とともにわかりやすく解説します。

問題の概要

2つの整数 nk が与えられたとき、n を2進数で表した際の「下から k 番目」のビットの値(0 または 1)を出力するのが課題です。

入出力例

入力: n = 12 , k = 3
出力: 1

解説: n = 12 の2進表現は「1100」です。ビットは右側(最下位)から数えるため、下から3番目のビットは 1 となります。

解き方のアプローチ

この問題は、ビット演算を利用することで非常に効率的に解けます。手順は次の通りです。

  1. 数値 1 を左に (k−1) ビットシフトし、k 番目のビットだけが立った「マスク」を作成します。
  2. 元の数値 n とこのマスクとのビットごとの論理積(AND)を計算します。
  3. 結果が 0 以外であれば k 番目のビットは 1、0 であれば k 番目のビットは 0 であると判定できます。

C++での実装例

以下のコードは、上記の解法を実装したものです。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N = 12, K = 3;
    cout<<K<<"th significant bit of "<<N<<" is : ";
    bool kthLSB = (N & (1 << (K-1)));
    cout<<kthLSB;
    return 0;
}

実行結果

3th significant bit of 12 is : 1

コードのポイント解説

重要なのは式 (N & (1 << (K-1))) の部分です。1 << (K-1) によって K 番目のビットのみが 1 になったマスクが生成され、N との AND 演算により他のすべてのビットが消去されます。この結果を bool 型の変数で受け取ることで、対象のビットが立っていれば true(1)、立っていなければ false(0)として出力されます。

  1. C++で解く:範囲内のK番目のビットがセットされた配列要素の数を求めるクエリ処理

    はじめに 本記事では、指定された範囲内に存在する要素のうち、K番目のビットがセット(1)になっている要素の個数を求める問題について解説します。まずは具体例を見てみましょう。 入力 : arr[] = { 4, 5, 7, 2 } クエリ1: L = 2, R = 4, K = 4 クエリ2: L = 3, R = 5, K = 1 出力 :     0     1 まずは総当たり(ブルートフォース)のアプローチでこの問題を解き、その手法が大きな制約値に対しても実用的かどうかを確認します。もし不十分であれば、より効率

  2. C++で五胞体数(ペンタトープ数)を求める方法

    五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の