Lompat ke isi

Geseran aritmetika

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Revisi sejak 25 Agustus 2026 14.05 oleh Maintenance script (bicara | kontrib) (Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi)
(beda) ← Revisi sebelumnya | Revisi terkini (beda) | Revisi selanjutnya → (beda)

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.[1]

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.[2]

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

  1. Guy Steele Jr. Arithmetic Shifting Considered Harmful. MIT AI Lab.
  2. Guy Steele Jr. Arithmetic Shifting Considered Harmful. MIT AI Lab.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 28446389 (2025-11-13T05:40:27Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.