Komplemen dua

**Komplemen dua** adalah metode paling umum untuk merepresentasikan bilangan bertanda (positif, negatif, dan nol) bilangan bulat pada komputer, dan secara lebih umum, nilai biner titik tetap. Seperti pada sistem Komplemen satu dan Tanda-magnitudo, komplemen dua menggunakan Bit paling signifikan sebagai *tanda* untuk menunjukkan bilangan positif (0) atau negatif (1), dan bilangan tak-negatif diberikan representasi tak bertanda (6 adalah 0110, nol adalah 0000); tetapi, dalam komplemen dua, bilangan negatif direpresentasikan dengan mengambil Komplemen bit dari magnitudonya lalu menambahkan satu (−6 adalah 1010). Jumlah bit dalam representasi dapat ditingkatkan dengan menambahkan semua bit tinggi tambahan dari bilangan negatif atau positif dengan 1 atau 0 masing-masing, atau dikurangi dengan menghapus 1 atau 0 terdepan tambahan.

Berbeda dengan skema Komplemen satu, skema komplemen dua hanya memiliki satu representasi untuk nol, dengan ruang untuk satu bilangan negatif tambahan (rentang bilangan 4-bit adalah −8 hingga +7). Selain itu, implementasi aritmetika yang sama dapat digunakan pada bilangan bulat bertanda maupun tak bertanda, dan hanya berbeda dalam situasi Luapan bilangan bulat, karena jumlah representasi bilangan positif dan negatifnya adalah 0 (dengan bit carry diset).

## Prosedur
Berikut prosedur untuk memperoleh representasi komplemen dua dari suatu bilangan *negatif* dalam digit biner:

* Langkah 1: mulai dengan representasi biner absolut dari bilangan, dengan bit awal sebagai bit tanda;
* Langkah 2: balikkan (atau ubah) semua bit – setiap 0 menjadi 1, dan setiap 1 menjadi 0;
* Langkah 3: tambahkan 1 ke seluruh bilangan yang sudah dibalik, abaikan luapan. Memperhitungkan luapan akan menghasilkan nilai yang salah.

Sebagai contoh, untuk menghitung bilangan **−6** dalam biner dari bilangan **6**:

* Langkah 1: *+6* dalam desimal adalah *0110* dalam biner; bit signifikan paling kiri (0 pertama) adalah tanda (hanya 110 dalam biner akan menjadi −2 dalam desimal).
* Langkah 2: balik semua bit dalam *0110*, menghasilkan *1001*.
* Langkah 3: tambahkan nilai tempat 1 ke bilangan yang dibalik *1001*, menghasilkan *1010*.

Untuk memverifikasi bahwa *1010* memang bernilai *−6*, jumlahkan nilai tempatnya, tetapi *kurangi* nilai tanda dari perhitungan akhir. Karena nilai paling signifikan adalah nilai tanda, maka harus dikurangkan untuk menghasilkan hasil yang benar: **1010** = **−**(**1**×23) + (**0**×22) + (**1**×21) + (**0**×20) = **1**×−8 + **0** + **1**×2 + **0** = −6.

Perhatikan bahwa langkah 2 dan 3 bersama-sama merupakan metode yang valid untuk menghitung Invers aditif -n dari bilangan bulat (positif atau negatif) n di mana input dan output keduanya dalam format komplemen dua. Alternatif untuk menghitung -n adalah menggunakan pengurangan 0-n. Lihat di bawah untuk pengurangan bilangan bulat dalam format komplemen dua.

## Teori

Komplemen dua adalah contoh dari komplemen basis. “Dua” dalam namanya mengacu pada bilangan  – "dua pangkat N", yang merupakan nilai acuan terhadap mana komplemen dihitung dalam sistem -bit (satu-satunya kasus di mana tepat menghasilkan “dua” adalah , untuk sistem 1-bit, tetapi ini tidak memiliki kapasitas untuk tanda dan nol). Dengan demikian, definisi tepat dari *komplemen dua* dari bilangan -bit adalah komplemen bilangan itu terhadap .

Sifat utama dari “komplemen terhadap ” adalah bahwa penjumlahan bilangan ini dengan bilangan asalnya menghasilkan . Misalnya, menggunakan biner hingga tiga bit ( dan , di mana '2' menunjukkan representasi biner), komplemen dua dari bilangan 3 () adalah 5 (), karena jika dijumlahkan dengan bilangan asalnya memberikan . Ketika korespondensi ini digunakan untuk merepresentasikan bilangan negatif, hal ini berarti bahwa ruang bilangan 0 sampai 7 dibagi dua: empat bilangan pertama (0–3) tetap sama, sementara empat sisanya mewakili bilangan negatif, dengan urutan yang sama, sehingga 4 mewakili −4, 5 mewakili −3, 6 mewakili −2, dan 7 mewakili −1. Representasi biner juga memiliki kegunaan tambahan, karena bit paling signifikan menunjukkan kelompok (dan tanda): 0 untuk kelompok bilangan tak-negatif pertama, dan 1 untuk kelompok negatif kedua. Tabel di bawah menunjukkan sifat ini.

Perhitungan komplemen dua biner dari bilangan positif pada dasarnya berarti mengurangkan bilangan itu dari . Namun, seperti pada contoh tiga-bit dan empat-bit  (), bilangan  sendiri tidak dapat direpresentasikan dalam sistem terbatas  bit, karena berada tepat di luar ruang  bit (bilangan ini tetap menjadi titik acuan dari "komplemen dua" dalam sistem -bit). Karena itu, sistem -bit harus memecah pengurangan menjadi dua operasi: pertama kurangi dari bilangan maksimum dalam sistem -bit, yaitu  (bilangan ini dalam biner merupakan bilangan sederhana yang terdiri dari 'semua 1', dan pengurangan dari bilangan tersebut dapat dilakukan hanya dengan membalik semua bit, yang juga dikenal sebagai operasi bitwise NOT), lalu tambahkan satu. Kebetulan, bilangan antara sebelum penambahan satu ini juga digunakan dalam ilmu komputer sebagai metode lain dari representasi bilangan bertanda dan disebut Komplemen satu (disebut demikian karena penjumlahan bilangan seperti itu dengan bilangan asal menghasilkan 'semua 1').

Dibandingkan dengan sistem lain untuk merepresentasikan bilangan bertanda (misalnya Komplemen satu), komplemen dua memiliki keunggulan karena operasi aritmetika dasar Penjumlahan, Pengurangan, dan Perkalian identik dengan bilangan biner tak bertanda (selama input diwakili dalam jumlah bit yang sama dengan output, dan setiap luapan di luar bit tersebut dibuang dari hasilnya). Sifat ini membuat sistem lebih mudah diimplementasikan, terutama untuk aritmetika presisi tinggi. Selain itu, tidak seperti sistem komplemen satu, komplemen dua tidak memiliki representasi untuk nol negatif, sehingga bebas dari kesulitan yang terkait dengannya. Jika tidak, kedua skema memiliki sifat yang diinginkan bahwa tanda bilangan bulat dapat dibalik dengan mengambil komplemen dari representasi binernya, tetapi komplemen dua memiliki satu pengecualian – bilangan negatif terkecil, seperti terlihat pada tabel.

## Sejarah
Metode komplemen telah lama digunakan untuk melakukan pengurangan dalam mesin hitung dan kalkulator mekanik desimal. John von Neumann menyarankan penggunaan representasi biner komplemen dua dalam proposal tahun 1945-nya *[[First Draft of a Report on the EDVAC]]* untuk komputer digital berbasis program tersimpan. EDSAC tahun 1949, yang terinspirasi dari *First Draft* tersebut, menggunakan representasi komplemen dua untuk bilangan bulat biner negatif.

Banyak komputer awal, termasuk CDC 6600, LINC, PDP-1, dan UNIVAC 1107, menggunakan notasi Komplemen satu; turunan dari UNIVAC 1107, yaitu Seri UNIVAC 1100/2200, terus menggunakannya. Mesin ilmiah Seri IBM 700/7000 menggunakan notasi tanda-magnitudo, kecuali untuk register indeks yang menggunakan komplemen dua. Komputer komersial awal yang menyimpan nilai negatif dalam bentuk komplemen dua termasuk English Electric DEUCE (1955) dan Digital Equipment Corporation PDP-5 (1963) serta PDP-6 (1964). System/360, yang diperkenalkan pada 1964 oleh IBM, kemudian menjadi representasi biner paling luas digunakan dalam industri komputer. PDP-8 yang diperkenalkan pada 1965, menggunakan aritmetika komplemen dua, demikian juga Data General Nova tahun 1969, PDP-11 tahun 1970, dan hampir semua komputer mini serta mikrokomputer sesudahnya.

## Lihat pula
* Komplemen satu, konvensi bilangan biner alternatif
* Algoritma pembagian, termasuk pembagian pemulihan dan tanpa pemulihan dalam representasi komplemen dua
* Offset binary
* Bilangan ''p''-adik
* Metode komplemen, generalisasi ke basis bilangan lain, digunakan pada kalkulator mekanik

## Referensi

## Bacaan lanjutan
* Penjelasan Komplemen Dua (Thomas Finley, 2000)
* 
* 

## Pranala luar
* Simulator pengali array komplemen dua berbasis JavaScript