C++ Check If Number Is Power Of 2

6 min read Jul 01, 2024
C++ Check If Number Is Power Of 2

Cara Mengecek Apakah Sebuah Angka Merupakan Pangkat Dua di C++

Dalam pemrograman C++, terkadang kita perlu memeriksa apakah sebuah angka merupakan pangkat dua. Contohnya, kita ingin mengetahui apakah bilangan 16 merupakan pangkat dua, atau bilangan 25 bukan merupakan pangkat dua.

Ada beberapa cara untuk melakukannya:

1. Menggunakan Operator Bitwise

Metode ini memanfaatkan sifat dari angka yang merupakan pangkat dua. Angka pangkat dua memiliki hanya satu bit yang dihidupkan (set) dalam representasi binernya.

Berikut adalah kode C++ untuk memeriksa apakah sebuah angka merupakan pangkat dua:

#include 

using namespace std;

bool isPowerOfTwo(int n) {
  // Jika n kurang dari atau sama dengan 0, bukan pangkat dua
  if (n <= 0) {
    return false;
  }
  // Lakukan operasi bitwise AND antara n dan n-1
  return (n & (n - 1)) == 0;
}

int main() {
  int number = 16;
  if (isPowerOfTwo(number)) {
    cout << number << " adalah pangkat dua." << endl;
  } else {
    cout << number << " bukan pangkat dua." << endl;
  }
  return 0;
}

Penjelasan:

  • isPowerOfTwo(int n) adalah fungsi yang mengembalikan true jika n adalah pangkat dua, dan false jika tidak.
  • n & (n - 1) melakukan operasi bitwise AND antara n dan n-1.
  • Jika n adalah pangkat dua, maka hanya satu bit yang dihidupkan dalam representasi binernya. Ketika dikurangi 1, bit tersebut akan dimatikan, dan semua bit yang lebih rendah akan dihidupkan. Operasi AND akan menghasilkan 0 karena tidak ada bit yang dihidupkan pada kedua angka tersebut.

2. Menggunakan Loop

Metode ini lebih mudah dipahami, namun mungkin sedikit kurang efisien dibandingkan metode bitwise.

#include 

using namespace std;

bool isPowerOfTwo(int n) {
  // Jika n kurang dari atau sama dengan 0, bukan pangkat dua
  if (n <= 0) {
    return false;
  }
  // Jika n adalah 1, maka merupakan pangkat dua
  if (n == 1) {
    return true;
  }
  // Lakukan loop hingga n menjadi 1
  while (n > 1) {
    // Jika n tidak habis dibagi 2, bukan pangkat dua
    if (n % 2 != 0) {
      return false;
    }
    // Bagi n dengan 2
    n /= 2;
  }
  // Jika loop selesai, n adalah pangkat dua
  return true;
}

int main() {
  int number = 16;
  if (isPowerOfTwo(number)) {
    cout << number << " adalah pangkat dua." << endl;
  } else {
    cout << number << " bukan pangkat dua." << endl;
  }
  return 0;
}

Penjelasan:

  • isPowerOfTwo(int n) adalah fungsi yang mengembalikan true jika n adalah pangkat dua, dan false jika tidak.
  • Fungsi tersebut terlebih dahulu memeriksa apakah n kurang dari atau sama dengan 0 atau sama dengan 1.
  • Kemudian, fungsi melakukan loop hingga n menjadi 1.
  • Pada setiap iterasi, fungsi memeriksa apakah n habis dibagi 2. Jika tidak, maka n bukan pangkat dua.
  • Jika loop selesai tanpa menemukan bahwa n tidak habis dibagi 2, maka n adalah pangkat dua.

3. Menggunakan Fungsi Logaritma

Metode ini menggunakan fungsi logaritma untuk memeriksa apakah sebuah angka merupakan pangkat dua.

#include 
#include 

using namespace std;

bool isPowerOfTwo(int n) {
  // Jika n kurang dari atau sama dengan 0, bukan pangkat dua
  if (n <= 0) {
    return false;
  }
  // Hitung logaritma basis 2 dari n
  double log2n = log2(n);
  // Jika logaritma basis 2 dari n adalah bilangan bulat, maka n adalah pangkat dua
  return (log2n - floor(log2n)) == 0;
}

int main() {
  int number = 16;
  if (isPowerOfTwo(number)) {
    cout << number << " adalah pangkat dua." << endl;
  } else {
    cout << number << " bukan pangkat dua." << endl;
  }
  return 0;
}

Penjelasan:

  • isPowerOfTwo(int n) adalah fungsi yang mengembalikan true jika n adalah pangkat dua, dan false jika tidak.
  • Fungsi tersebut terlebih dahulu memeriksa apakah n kurang dari atau sama dengan 0.
  • Kemudian, fungsi tersebut menghitung logaritma basis 2 dari n menggunakan fungsi log2().
  • Jika logaritma basis 2 dari n adalah bilangan bulat, maka n adalah pangkat dua.

Pilihlah metode yang paling sesuai dengan kebutuhan Anda. Metode bitwise biasanya merupakan metode yang paling efisien, sedangkan metode loop lebih mudah dipahami. Metode logaritma dapat digunakan jika Anda memiliki kebutuhan khusus untuk menggunakan fungsi logaritma.

Latest Posts