Geseran aritmetika
Artikel ini perlu diwikifikasi agar memenuhi standar kualitas Wikipedia. Anda dapat memberikan bantuan berupa penambahan pranala dalam, atau dengan merapikan tata letak dari artikel ini.
Untuk keterangan lebih lanjut, klik [tampil] di bagian kanan.
|
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, namun 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
[sunting | sunting sumber]- ^ Steele Jr, Guy. "Arithmetic Shifting Considered Harmful" (PDF). MIT AI Lab. Diarsipkan (PDF) dari versi aslinya tanggal 2022-10-09. Diakses tanggal 20 May 2013.
- ^ Steele Jr, Guy. "Arithmetic Shifting Considered Harmful" (PDF). MIT AI Lab. Diarsipkan (PDF) dari versi aslinya tanggal 2022-10-09. Diakses tanggal 20 May 2013.