C: operasi bit level

     
Operasi bit maksudnya adalah operasi matematika yang dilakukan pada level bit atau biner. jenis-jenisnya ada : >> (shift right), << (shift left), & (AND), | (OR), ^ (XOR atau exclusive OR) dan ~ (NOT). Pertama yang akan di bahas adalah >> dan <<.



     untuk mempermudah memahami bisa kita ambil contoh (dalam contoh ini adalah char atau 8 bit) :

1 << 2
      Itu artinya angka 1 dalam level biner, bitnya di geser ke kiri 2x, sementara 1 dalam biner adalah :

00000001 
     Jika di geser kekiri 2x berarti, hasilnya dalam level biner adalah :

00000100  atau 4 dalam desimal    
                                    

Ambil contoh angka lain semisal 5 dalam biner :
00000101 
 
Digeser ke kiri 3x (5 << 3) maka hasilnya adalah :
10100000 atau 160 (unsigned) atau -96 (signed)
    

Untuk >> jika memakai angka contoh yang tadi pertama (5 >> 3) maka hasilnya adalah :
00000000 atau 0
 
Selebihnya >> dan << sama saja, yang membedakan hanya arah geser bitnya.Selanjutnya untuk & (AND), | (OR). Pertama-tama rule dari & :
bit 1 bit 2 hasil

1      0       0   

1      1       1   

0      0       0 
 
Jadi sebagai contoh operasi (5 & 3) hasilnya adalah (sekali lagi memakai char atau 8 bit) :
   00000101    5
   00000011    3
   ----------------------
   00000001    1
 
 & (AND) biasanya digunakan untuk mengecek flag. Untuk | (OR) rulenya adalah :
bit 1 bit2 hasil
1      0      1   
1      1      1   
0      0      0      
 
Jadi dengan angka yang sama dengan yang tadi (5 | 3) hasilnya adalah :
    00000101    5
    00000011    3
    ----------------------
    00000111    7  
 
 Selanjutnya ^ (XOR), rulenya adalah :
    bit1 bit2 hasil
    1     0     1    
    1     1     0    
    0     0     0       
 
 Jadi, untuk contoh (5 ^ 3) hasilnya adalah :
     00000101    5
     00000011    3
     ----------------------
     00000110    6 
 
 Untuk ~ (NOT) dia sedikit spesial. Dia tidak membutuhkan bilangan pasangan karena NOT hanya menegasi, jadi biner yang tadinya biner 1 jadi dan 0 dan sebaliknya. Untuk mempermudah pemahaman sebagai contoh (~5) :
     00000101    5                    
    ---------------  ~                      
    11111010    250 (unsigned) 
 
Untuk operasi yang lebih rumit misal (~5 >> 3) maka hasilnya :

00000101    5                     
---------------  ~                       
11111010    250 (unsigned)                                         

11111010    250                 
---------------- >> 3                  
00011111    31  

Komentar