Komplemen dua: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29209403; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 1: | Baris 1: | ||
'''Komplemen dua''' adalah metode paling umum untuk merepresentasikan [[bilangan biner bertanda|bilangan bertanda]] (positif, negatif, dan nol) [[Integer (ilmu komputer)|bilangan bulat]] pada komputer, dan secara lebih umum, nilai [[Aritmetika titik tetap|biner titik tetap]]. Seperti pada sistem [[Komplemen satu]] dan [[bilangan biner bertanda|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. | '''Komplemen dua''' adalah metode paling umum untuk merepresentasikan [[bilangan biner bertanda|bilangan bertanda]] (positif, negatif, dan nol) [[Integer (ilmu komputer)|bilangan bulat]] pada komputer,<ref>"Signed integers are two's complement binary values that can be used to represent both positive and negative integer values", Bagian 4.2.1 dalam ''Intel 64 and IA-32 Architectures Software Developer's Manual'', Volume 1: Basic Architecture, November 2006</ref> dan secara lebih umum, nilai [[Aritmetika titik tetap|biner titik tetap]]. Seperti pada sistem [[Komplemen satu]] dan [[bilangan biner bertanda|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). | 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,<ref>Alexandre Bergel. [http://files.pharo.org/books-pdfs/deep-into-pharo/2013-DeepIntoPharo-EN.pdf Deep into Pharo]. 2013. hlm. 337.</ref> dan hanya berbeda dalam situasi [[Luapan bilangan bulat]], karena jumlah representasi bilangan positif dan negatifnya adalah 0 (dengan bit carry diset). | ||
== Prosedur == | == Prosedur == | ||
Berikut prosedur untuk memperoleh representasi komplemen dua dari suatu bilangan ''negatif'' dalam digit biner: | 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 1: mulai dengan representasi biner absolut dari bilangan, dengan bit awal sebagai bit tanda;<ref>[https://www.rit.edu/academicsuccesscenter/sites/rit.edu.academicsuccesscenter/files/documents/math-handouts/DM3_TwosComplement_BP_9_22_14.pdf Two's Complement]. ''University of Rochester Academic Success Center''.</ref> | ||
* Langkah 2: balikkan (atau ubah) semua bit – setiap 0 menjadi 1, dan setiap 1 menjadi 0; | * 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 [[Integer overflow|luapan]]. Memperhitungkan luapan akan menghasilkan nilai yang salah. | * Langkah 3: tambahkan 1 ke seluruh bilangan yang sudah dibalik, abaikan [[Integer overflow|luapan]]. Memperhitungkan luapan akan menghasilkan nilai yang salah. | ||
| Baris 17: | Baris 17: | ||
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'''×2<sup>3</sup>) + ('''0'''×2<sup>2</sup>) + ('''1'''×2<sup>1</sup>) + ('''0'''×2<sup>0</sup>) = '''1'''×−8 + '''0''' + '''1'''×2 + '''0''' = −6. | 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'''×2<sup>3</sup>) + ('''0'''×2<sup>2</sup>) + ('''1'''×2<sup>1</sup>) + ('''0'''×2<sup>0</sup>) = '''1'''×−8 + '''0''' + '''1'''×2 + '''0''' = −6. | ||
{| class="wikitable" | |||
|Bits: | |||
|1 | |||
|0 | |||
|1 | |||
|0 | |||
|- | |||
|Nilai bit desimal: | |||
| '''−'''8 | |||
|4 | |||
|2 | |||
|1 | |||
|- | |||
|Perhitungan biner: | |||
|'''−'''('''1'''×2<sup>3</sup>) | |||
|('''0'''×2<sup>2</sup>) | |||
|('''1'''×2<sup>1</sup>) | |||
|('''0'''×2<sup>0</sup>) | |||
|- | |||
|Perhitungan desimal: | |||
|'''−'''('''1'''×8) | |||
|'''0''' | |||
|'''1'''×2 | |||
|'''0''' | |||
|} | |||
Perhatikan bahwa langkah 2 dan 3 bersama-sama merupakan metode yang valid untuk menghitung [[Invers aditif]] <math>-n</math> dari bilangan bulat (positif atau negatif) <math>n</math> di mana input dan output keduanya dalam format komplemen dua. Alternatif untuk menghitung <math>-n</math> adalah menggunakan pengurangan <math>0-n</math>. Lihat di bawah untuk pengurangan bilangan bulat dalam format komplemen dua. | Perhatikan bahwa langkah 2 dan 3 bersama-sama merupakan metode yang valid untuk menghitung [[Invers aditif]] <math>-n</math> dari bilangan bulat (positif atau negatif) <math>n</math> di mana input dan output keduanya dalam format komplemen dua. Alternatif untuk menghitung <math>-n</math> adalah menggunakan pengurangan <math>0-n</math>. Lihat di bawah untuk pengurangan bilangan bulat dalam format komplemen dua. | ||
== Teori == | == Teori == | ||
Komplemen dua adalah contoh dari [[Metode komplemen|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 [[Metode komplemen|komplemen]] bilangan itu terhadap . | Komplemen dua adalah contoh dari [[Metode komplemen|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 [[Metode komplemen|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 '<sub>2</sub>' 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. | Sifat utama dari “komplemen terhadap ” adalah bahwa penjumlahan bilangan ini dengan bilangan asalnya menghasilkan . Misalnya, menggunakan biner hingga tiga bit ( dan , di mana '<sub>2</sub>' 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. | ||
{|class="wikitable sortable floatright" style="text-align: center;" | |||
|+ Bilangan bulat tiga-bit | |||
! Bit | |||
!Nilai tak bertanda | |||
!Nilai bertanda<br />(Komplemen dua) | |||
|- | |||
|000 | |||
|0 | |||
|0 | |||
|- | |||
|001 | |||
|1 | |||
|1 | |||
|- | |||
|010 | |||
|2 | |||
|2 | |||
|- | |||
|011 | |||
|3 | |||
|3 | |||
|- | |||
|100 | |||
|4 | |||
|−4 | |||
|- | |||
|101 | |||
|5 | |||
|−3 | |||
|- | |||
|110 | |||
|6 | |||
|−2 | |||
|- | |||
|111 | |||
|7 | |||
|−1 | |||
|} | |||
{|class="wikitable sortable floatright" style="text-align: center;" | |||
|+ Bilangan bulat delapan-bit | |||
! Bit | |||
!Nilai tak bertanda | |||
!Nilai bertanda<br />(Komplemen dua) | |||
|- | |||
|0000 0000 | |||
|0 | |||
|0 | |||
|- | |||
|0000 0001 | |||
|1 | |||
|1 | |||
|- | |||
|0000 0010 | |||
|2 | |||
|2 | |||
|- | |||
|0111 1110 | |||
|126 | |||
|126 | |||
|- | |||
|0111 1111 | |||
|127 | |||
|127 | |||
|- | |||
|1000 0000 | |||
|128 | |||
|−128 | |||
|- | |||
|1000 0001 | |||
|129 | |||
|−127 | |||
|- | |||
|1000 0010 | |||
|130 | |||
|−126 | |||
|- | |||
|1111 1110 | |||
|254 | |||
|−2 | |||
|- | |||
|1111 1111 | |||
|255 | |||
|−1 | |||
|} | |||
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|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'). | 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|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 bilangan bulat|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 bertanda|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. | 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 bilangan bulat|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 bertanda|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.<ref>David J. Lilja. [https://books.google.com/books?id=5BvW0hYhxkQC&dq=%22two%27s+complement+arithmetic%22&pg=PA37 Designing Digital Computer Systems with Verilog]. Cambridge University Press. 2005. ISBN 9780521828666.</ref> | ||
== Sejarah == | == 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. | [[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.<ref>John von Neumann. [http://web.mit.edu/STS.035/www/PDFs/edvac.pdf First Draft of a Report on the EDVAC]. 1945.</ref> [[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). [[IBM System/360|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. | 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). [[IBM System/360|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. | ||
| Baris 43: | Baris 151: | ||
* [[Bilangan p-adik|Bilangan ''p''-adik]] | * [[Bilangan p-adik|Bilangan ''p''-adik]] | ||
* [[Metode komplemen]], generalisasi ke basis bilangan lain, digunakan pada kalkulator mekanik | * [[Metode komplemen]], generalisasi ke basis bilangan lain, digunakan pada kalkulator mekanik | ||
== Bacaan lanjutan == | == Bacaan lanjutan == | ||
* [https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html Penjelasan Komplemen Dua] (Thomas Finley, 2000) | * [https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html Penjelasan Komplemen Dua] (Thomas Finley, 2000) | ||
* | * | ||
* | * | ||
== Pranala luar == | == Pranala luar == | ||
* [http://www.ecs.umass.edu/ece/koren/arith/simulator/ArrMlt/ Simulator pengali array komplemen dua berbasis JavaScript] | * [http://www.ecs.umass.edu/ece/koren/arith/simulator/ArrMlt/ Simulator pengali array komplemen dua berbasis JavaScript] | ||
== Referensi == | |||
<references /> | |||
== Sumber dan atribusi == | == Sumber dan atribusi == | ||
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Komplemen+dua&oldid=29209403 Wikipedia bahasa Indonesia], revisi 29209403 (2026-05-10T05:38:37Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku. | Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Komplemen+dua&oldid=29209403 Wikipedia bahasa Indonesia], revisi 29209403 (2026-05-10T05:38:37Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku. | ||
<!-- WIKI_UNISSULA_PRESENTATION_V4 --> | |||
Revisi terkini sejak 25 Agustus 2026 13.57
Komplemen dua adalah metode paling umum untuk merepresentasikan bilangan bertanda (positif, negatif, dan nol) bilangan bulat pada komputer,[1] 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,[2] 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;[3]
- 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.
| Bits: | 1 | 0 | 1 | 0 |
| Nilai bit desimal: | −8 | 4 | 2 | 1 |
| Perhitungan biner: | −(1×23) | (0×22) | (1×21) | (0×20) |
| Perhitungan desimal: | −(1×8) | 0 | 1×2 | 0 |
Perhatikan bahwa langkah 2 dan 3 bersama-sama merupakan metode yang valid untuk menghitung Invers aditif dari bilangan bulat (positif atau negatif) di mana input dan output keduanya dalam format komplemen dua. Alternatif untuk menghitung adalah menggunakan pengurangan . 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.
| Bit | Nilai tak bertanda | Nilai bertanda (Komplemen dua) |
|---|---|---|
| 000 | 0 | 0 |
| 001 | 1 | 1 |
| 010 | 2 | 2 |
| 011 | 3 | 3 |
| 100 | 4 | −4 |
| 101 | 5 | −3 |
| 110 | 6 | −2 |
| 111 | 7 | −1 |
| Bit | Nilai tak bertanda | Nilai bertanda (Komplemen dua) |
|---|---|---|
| 0000 0000 | 0 | 0 |
| 0000 0001 | 1 | 1 |
| 0000 0010 | 2 | 2 |
| 0111 1110 | 126 | 126 |
| 0111 1111 | 127 | 127 |
| 1000 0000 | 128 | −128 |
| 1000 0001 | 129 | −127 |
| 1000 0010 | 130 | −126 |
| 1111 1110 | 254 | −2 |
| 1111 1111 | 255 | −1 |
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.[4]
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.[5] 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
Bacaan lanjutan
- Penjelasan Komplemen Dua (Thomas Finley, 2000)
Pranala luar
Referensi
- ↑ "Signed integers are two's complement binary values that can be used to represent both positive and negative integer values", Bagian 4.2.1 dalam Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1: Basic Architecture, November 2006
- ↑ Alexandre Bergel. Deep into Pharo. 2013. hlm. 337.
- ↑ Two's Complement. University of Rochester Academic Success Center.
- ↑ David J. Lilja. Designing Digital Computer Systems with Verilog. Cambridge University Press. 2005. ISBN 9780521828666.
- ↑ John von Neumann. First Draft of a Report on the EDVAC. 1945.
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29209403 (2026-05-10T05:38:37Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.