Operator dan Bilangan Biner

Dalam pemrograman, kita bisa menampilkan dan menyimpan variabel. Selain itu, kita juga bisa melakukan operasi aritmetika dengan menggunakan variabel-variabel tersebut. Sama dengan dalam matematika, operator aritmetika yang kita gunakan dalam pemrograman juga memiliki hirarki atau urutan pengerjaan. Sebelum membahas hirarkinya, mari kita lihat operator aritmetika apa saja yang bisa kita gunakan dalam bahasa C dan C++.
  1. Penjumlahan (+)
  2. Pengurangan (-)
  3. Perkalian (*)
  4. Pembagian (-)
  5. Operator modulo / modulus (%)
Berikut ini adalah contoh kode program untuk menghitung luas persegi panjang yang menggunakan operator perkalian.
#include <stdio.h>

int  main(){
int p=10;
int l=20;
int Luas;
    Luas=p*l; 
    printf("Panjang : %d\n", p);
    printf("Lebar : %d\n", l);
    printf("Luas : p x l = %d", Luas);
    return 0;
}
Pada contoh di atas, kita menggunakan operator perkalian untuk mengalikan variabel p dan l sebelum kita menyimpan hasilnya ke dalam variabel Luas. Setelah penghitungan selesai, kita menampilkan hasil perkaliannya dengan printf.

Supaya kita bisa meminta input dari pengguna, kita bisa menambahkan scanf atau cin. Di bawah ini, saya hanya akan menggunakan scanf. Kalau bahasa pemrograman yang kalian gunakan adalah bahasa C++, kalian bisa juga menggunakan std::cin.
#include <stdio.h> 

int  main(){
int p, l, Luas;
    printf("Panjang : ");scanf("%d", &p);
    printf("Lebar : ");scanf("%d", &l);
    Luas=p*l; 
    printf("Luas : p x l = %d", Luas);
    return 0;
}

Operator Bitwise dan Bilangan Biner
Selain operator aritmatika, ada operator-operator lain. Salah satunya adalah bitwise operator. Bitwise operator digunakan untuk melakukan tertentu perhitungan berdasarkan nilai binernya. Setiap bilangan desimal bisa diubah menjadi bilangan biner yang terdiri dari angka 1 dan 0. Berikut ini adalah aturan hasil dari bitwise operator.
  1. & (bitwise AND) : Bernilai 1 jika bit yang sama dari kedua operand bernilai 1
  2. | (bitwise OR) : Bernilai 1 jika bit yang sama dari kedua operand salah satu atau nilainya adalah 1.
  3. ^ (bitwise XOR) : Bernilai 1 jika bit yang sama dari kedua operand salah satunya bernilai 1.
  4. << (left shift) : Menggeser semua bit ke kiri. Bit yang berada bagian paling kanan akan bernilai 0. Misalnya, 1111 menjadi 0111.
  5. >> (right shift) : Menggeser semua bit ke kanan. Bit yang berada bagian paling kiri akan bernilai 0. Misalnya, 1111 menjadi 1110.
  6. ~ (bitwise NOT) : Mengubah bit yang bernilai 1 menjadi 0, dan yang bernilai 0 menjadi 1.
Bilangan biner adalah bilangan dengan basis 2. Bilangan biner hanya terdiri dari digit 1 dan 0. Digit-digit dalam bilangan biner biasa disebut dengan bit. Kalian bisa menganggap 1 sebagai "benar", dan 0 sebagai "salah". Berikut ini contoh perubahan nilai desimal / basis sesepuluh menjadi bilangan biner.

Desimal
Biner (8 bit )
0
0000 0000
1
0000 0001
2
0000 0010 09090909
3
0000 0011
4
0000 0100
5
0000 0101
6
0000 0110
7
0000 0111
8
0000 1000
9
0000 1001
10
0000 1010
11
0000 1011
12
0000 1100
13
0000 1101
14
0000 1110
15
0000 1111
16
0001 0000

Untuk mengubah bilangan biner menjadi bilangan desimal, kalian perlu memahami bahwa tiap bit dalam bilangan biner bernilai 2n(dua pangkat n), dan nilai "n" sesuai dengan "posisi dari tiap bit dari kanan". Misalnya, bilangan biner "101" nilai desimalnya adalah 5 karena "1 x (2^2) + 0 x (2^1) + 1 x (2^0) = 2 + 0 + 1 = 5". Contoh lainnya bisa kalian lihat di bawah ini!
  1. 10 => 1 x (2^1)+0 x (2^0)=2+0=2
  2. 11 => 1 x (2^1)+1 x (2^0)=2+1=3
  3. 100 => 1 x (2^2)+0 x (2^1)+0 x (2^0) = 4+0+0 =4
  4. 101 => 1 x (2^2)+0 x (2^1)+1 x (2^0) = 4+0+1 =5
  5. 110 => 1 x (2^2)+1 x (2^1)+0 x (2^0) = 4+2+0 =6
  6. 111 => 1 x (2^2)+1 x (2^1)+1 x (2^0) = 4+2+1 =7
  7. 1000 => 1 x (2^3)+0 x (2^2)+0 x (2^1)+0 x (2^0) = 8+0+0+0 = 8
Kalian bisa mengubah bilangan desimal menjadi biner atau sebaliknya dengan membuat programnya. Tentu saja, itu baru bisa kalian lakukan jika kalian sudah paham tentang cara mengubah bilangan desimal menjadi biner. Saya akan membantu kalian membuat program yang merubah bilangan desimal menjadi bilangan biner dengan C++. Kalau kalian belum paham isinya, abaikan saja dan lihat hasil dari programnya!

Berikut ini adalah kode programnya!
#include <iostream>
#include <stdlib.h>

using namespace std;
int biner(int a){
int x = 1;
    while(x<=a)x*=2;

    do{
        x/=2;
        if(a>=x){
            cout << 1;
            a%=x;
        }else{
            cout<< 0;
        }
    }while();
    return a;
}

int main(){
    int bilangan;
    cout << "masukkan bilangan desimal yang akan anda ubah : ";
    cin >> bilangan;
    biner(bilangan);
    return 0;
}

Operator Lainnya?
Mungkin, kalian yang baru belajar pemrograman sedang bertanya, "di manakah operator seperti pangkat dan akar kuadrat?". Kalian bisa menggunakan beberapa operator aritmatika seperti akar / sqrt, abs, sin cos, tan, ceil, floor, round, atan, dll; dengan menggunakan fungsi yang ada di dalam header "math.h" untuk bahasa C, atau cmath untuk bahasa C++. Berikut ini adalah beberapa fungsi yang ada di dalam header "math.h".
    • abs(a) atau fabs(a) : mengubah nilai bilangan negatif maupun positif menjadi bilangan positif.
    • sqrt(a): akar kuadrat.
    • sin(a), cos(a), tan(a) : fungsi trigonometri (sesuai namanya).
    • atan(a), asin(a), acos(a) : kebalikan dari sin, cos dan tan.
    • pow(a, b) : pemangkatan.
    • log (a) : logaritma.
    • log10 (a) : log 10.
    • floor(a): membulatkan bilangan dengan type data float ke bawah.
    • ceil(a) : membulatkan bilangan dengan type data float ke atas.
    • round(a) : membulatkan bilangan bulat sesuai dengan aturan matematika.
      Fungsi-fungsi di atas menggunakan satu parameter sebagai variabelnya. Selain fungsi-funcsi tersebut, masih ada fungsi lain yang menggunakan lebih dari satu variabel, salah satunya adalah pow(a, b).

      Untuk menggunakannya ganti "a" dan “b” dengan variabel yang kalian gunakan dalam program. berikut ini penerapannya :
      #include <stdio.h>
      #include <math.h>
      
      const float pi=3.14159265358979323846;
      
      using namespace std;
      
      int main(){
      int a;
      float derajat=pi/180;
           a=sqrt(9);
           printf("sqrt(9) = %d\n", a);
           printf("sin(pi radian) = %f\n", sin(pi));
           printf("sin(30 derajat) = %f", sin(30*derajat));
           return 0;
      }
      Bwt, fungsi trigonometri dalam C atau C++ menggunakan satuan radian / rad, dan bukan derajat. Untuk yang belum tahu tentang radian, berikut ini informasi yang mungkin akan kalian butuhkan.
      • Ï€ => Pi
      • Ï€ rad = 180 derajat;
      • 2Ï€ rad = 360 derajat;
      • 1 derajat = (Ï€ / 180)rad
      • Ï€ = 22/7 = 3.14159265358979323846....
      Walaupun tidak semua operasi aritmatika ada dalam "math.h" atau "cmath", misalnya integral dan turunan, kalian seharusnya tetap bisa membuat program yang menggunakan integral, turunan, dll; jika kalian adalah programmer yang cukup kreatif dan cerdas.

      Urutan Pengerjaan Operator
      Bahasa C dan C++ tidak hanya menyediakan operator artimetika dan bitwise. Ada beberapa opertaor lain yang bisa kalian gunakan. Saya tidak akan membahas semua kegunaannya sekarang. Tapi, saya akan memberi tahu kalian tentang urutan pengerjaan dari masing-masing operator dalam bahasa C atau C++.

      Saat membuat program, kalian perlu memperhatikan hirarki dalam operasi aritmetika. Perkalian dan pembagian akan selalu lebih didahulukan daripada penjumlahan dan pengurangan. "4+3*5" hasilnya bukan "7x5=35", tetapi hasilnya adalah "4x15=60". Kalau kalian ingin mendapatkan 35 sebagai hasilnya, kalian bisa menggunakan tanda kurung sehingga penulisannya menjadi "(4+3)*5".
      Prioritas Operator Deskripsi Associativity
      1 :: Scope resolution (cuma C++) Tidak ada
      2 ++ Suffix increment Kiri ke kanan
      -- Suffix decrement
      () Function call
      [] Array subscripting
      . Element selection by reference
      -> Element selection through pointer
      typeid() Run-time type information (cuma C++)
      const_cast Type cast (cuma C++)
      dynamic_cast Type cast (cuma C++)
      reinterpret_cast Type cast (cuma C++)
      static_cast Type cast (cuma C++)
      3 ++ Prefix increment Kanan ke kiri
      -- Prefix decrement
      + Unary plus
      - Unary minus
      ! Logical NOT
      ~ Bitwise NOT
      (type) Type cast
      * dereferensi untuk pointer
      & Alamat pointer
      sizeof Ukuran tipe data
      new, new[] Dynamic memory allocation (cuma C++)
      delete, delete[] Dynamic memory deallocation (cuma C++)
      4 .* Pointer to member (cuma C++) Kiri ke kanan
      ->* Pointer to member (cuma C++)
      5 * Perkalian Kiri ke kanan
      / Pembagian
      % Modulo (sisa hasil bagi)
      6 + Penjumlahan Kiri ke kanan
      - Pengurangan
      7 << Bitwise, geser kiri Kiri ke kanan
      >> Bitwise, geser kanan
      8 < Kurang dari Kiri ke kanan
      <= Kurang dari atau sama dengan
      > Lebih besar dari
      >= Lebih dari atau sama dengan
      9 == Sama dengan (perbandingan) Kiri ke kanan
      != Tidak sama dengan
      10 & Bitwise AND Kiri ke kanan
      11 ^ Bitwise XOR (exclusive or) Kiri ke kanan
      12 | Bitwise OR (inclusive or) Kiri ke kanan
      13 && Logical AND Kiri ke kanan
      14 || Logical OR Kiri ke kanan
      15 ?: ?:) Kanan ke kiri
      16 = Penugasan / pemberian nilai Kanan ke kiri
      += Penugasan dengan penjumlahan
      -= Penugasan dengan pengurangan
      *= Penugasan dengan perkalian
      /= Penugasan dengan pembagian
      %= Penugasan dengan sisa hasil bagi
      <<= Penugasan dengan bitwise left shift
      >>= Penugasan dengan bitwise right shift
      &= Penugasan dengan bitwise AND
      ^= Penugasan dengan bitwise XOR
      |= Penugasan dengan bitwise OR
      17 throw Throw operator (exceptions throwing, Cuma C++) Kanan ke kiri
      18 , Koma Kiri ke kanan

      Contoh :
      #include <stdio.h>
      
      int  main(){
      int a, t, Luas;
          printf("2+5*2 = %d\n", 2+5*2);
          printf("(2+5)*2 = %d", (2+5)*2);
          return 0;
      }
      
      Pembagian Bilangan Bulat VS Pembagian Pecahan Desimal
      Dalam Bahasa C, C++, dan bahasa turunannya, hasil dari operasi pembagian akan ditentukan oleh nilai operand pertamanya atau nilai yang dibagi. Operand adalah bilangan atau variabel yang kalian gunakan dalam operasi hitung dengan menggunakan operator. Untuk lebih jelasnya, kita akan membuktikannya dengan membuat program untuk mencari Luas segitiga.
      #include <stdio.h>
      
      int  main(){
      int a, t, Luas;
          printf("Alas : ");scanf("%d", &a);
          printf("Tinggi : ");scanf("%d", &t);
          Luas=a*t/2; 
          printf("Luas : %d", Luas);
          return 0;
      }
      
      Contoh di atas akan memberikan hasil yang tidak tepat jika hasil kali dari variabel a dan t adalah bilangan ganjil. Hasil bagi dari bilangan ganjil dibagi 2 seharusnya memang berupa pecahan desimal. Tapi, karena tipe datanya adalah bilangan bulat, maka hasilnya dibulatkan ke bawah dengan membuang bagian desimalnya. Supaya hasilnya sesuai dengan keinginan kita, kita perlu mengubah tipe datanya menjadi float, double, atau tipe pecahan desimal lainnya.
      #include <stdio.h> 
      
      int  main(){
      float a, t, Luas;
          printf("Alas : ");scanf("%f", &a);
          printf("Tinggi : ");scanf("%f", &t);
          Luas=a*t/2; 
          printf("Luas : %f", Luas);
          return 0;
      }
      Ingat! Jika bilangan bulat yang dibagi, maka hasilnya adalah bilangan bulat yang dibulatkan ke bawah. Jika bilangan yang dibagi adalah pecahan desimal, maka hasilnya adalah pecahan desimal. Selain itu, hasil juga akan berubah kalau tipe data dari variabel yang digunakan untuk menyimpan suatu nilai tidak tepat. Bagian pecahan dari suatu bilangan saja akan hilang kalau kalian menyimpan pecahan desimal ke dalam variabel dengan tipe data bilangan bulat.

      Modulo atau Sisa hasil bagi
      Sisa hasil bagi akan berguna untuk menentukan bilangan yang habis dibagi, genap atau ganjil, FPB, KPK, dll. Operator untuk sisa hasil bagi dalam matematika disebut dengan modulo, atau sering disingkat dengan mod. Dalam algoritma euclidean, hasil dari sisa hasil bagi disebut juga dengan modulus. Sisa hasil bagi adalah pengurangan dari "bilangan yang dibagi" dengan "bilangan terdekat yang habis dibagi". Misalnya :
      • 4 mod 2 = 4-(2*2) = 4-4 = 0
      • 5 mod 2 = 5-(2*4) = 5-4 = 1
      • 8 mod 3 = 8-(3*2) = 8-6 = 2
      • 5 mod 7 = 5-(0*5) = 5-0  = 5
      Di kalkulator dan bahasa pascal, modulo disingkat dengan mod. Dalam bahasa C++, operator mod ditulis dengan menggunakan persen (%). Contoh penerapannya bisa kalian lihat dalam algoritma euclid.

      Operator penugasan
      Tanda sama dengan (=), adalah operator yang bisa kalian untuk memberikan nilai dalam bahasa C atau bahasa C++. Operator tersebut disebut juga dengan operator penugasan.

      Selain digunakan secara langsung setelah nama variabel, operator-operator aritmetika dan bitwise bisa kalian gabungkan dengan tanda = (sama dengan) jika hanya ada dua operand. Operand adalah variabel, angka, atau nilai tertentu yang digunakan dalam perhitungan menggunakan operator.
      • += (tambah)
      • -= (kurang)
      • /= (bagi)
      • *= (kali)
      • %= (sisa hasil bagi)
      • &= (and)
      • |= (or)
      • ^= (xor)
      Untuk tanda tambah (+) dan tanda kurang (-) ada dua operator khusus yaitu increment(++) dan decrement(--). Increment sama dengan penjumlahan variabel dengan 1, dan decrement sama dengan pengurangan variabel dengan 1

      Increment dan decrement bisa diletakkan setelah dan sebelum variabel.  Misalnya : x++, ++x, x--, atau --x. Perbedaan hasil yang dipengaruhi oleh peletakan increment dan decrement bisa kalian lihat kalau kalian meletakkan operator-operator tersebut di antara operator-operator lainnya dalam perhitungan. Untuk mengetahuinya, kalian bisa mencobanya sendiri dalam kode program yang kalian buat.

      Operator lain yang sering kita gunakan dalam hampir semua bahasa pemrograman adalah operator perbandingan dan operator logika. Operator-operator tersebut akan kita pelajari secara lebih spesifik dalam percabangan dan perulangan.

      Untuk kalian yang malas mengetik, download source code-nya di sini. Project-nya bisa kalian buka dengan menggunakan Code::Block.