Geseran aritmetika

Dalam pemrograman komputer, pergeseran aritmetika adalah sebuah operator pergeseran yang kadang disebut juga pergeseran bertanda, meskipun tidak terbatas hanya pada operan yang bertanda. Terdapat dua jenis dasar dari pergeseran aritmetika, yaitu pergeseran ke kiri dan pergeseran ke kanan. Untuk bilangan biner, ini merupakan operasi bitwise yang menggeser semua bit dari operand ke kiri atau ke kanan sebanyak sejumlah posisi bit tertentu. Setiap bit hanya dipindahkan ke posisi baru, dan posisi yang kosong akan diisi. Berbeda dengan pergeseran logika yang mengisi bit-bit kosong dengan nol, pada pergeseran aritmetika ke kanan, bit paling kiri (yang biasanya merupakan bit tanda pada representasi bilangan bertanda) akan disalin untuk mengisi posisi kosong. Proses ini dikenal sebagai ekstensi tanda.

Beberapa penulis lebih menyukai istilah sticky right-shift untuk pergeseran aritmetika ke kanan, dan zero-fill right-shift untuk pergeseran logika ke kanan.

Pergeseran aritmetika dapat berguna sebagai cara yang efisien untuk melakukan perkalian atau pembagian bilangan bulat bertanda dengan pangkat dua. Pergeseran ke kiri sebanyak n bit pada bilangan biner (baik bertanda maupun tidak bertanda) memiliki efek yang sama dengan mengalikannya dengan 2n. Pergeseran ke kanan sebanyak n bit pada bilangan bertanda dalam representasi komplemen dua setara dengan membaginya dengan 2n, tetapi hasilnya selalu dibulatkan ke bawah (menuju negatif tak hingga). Cara pembulatan ini berbeda dengan pembagian bilangan bulat bertanda pada umumnya, yang biasanya dibulatkan ke nol. Perbedaan ini telah menyebabkan bug (kesalahan) dalam beberapa kompiler.

Sebagai contoh, dalam set instruksi x86, instruksi shift arithmetic right (SAR) membagi bilangan bertanda dengan pangkat dua dan membulatkan hasilnya ke arah negatif tak hingga. Sebaliknya, instruksi integer divide (IDIV) membagi bilangan bertanda dengan hasil yang dibulatkan ke nol. Oleh karena itu, instruksi SAR tidak dapat menggantikan IDIV untuk pembagian dengan pangkat dua, dan sebaliknya pun demikian.

 Referensi 

Kategori:Aritmetika biner