Seperti kebanyakan penjelasan yang pernah saya lihat, yang di atas jelas tentang cara bekerja dengan komplemen 2, tetapi tidak benar-benar menjelaskan apa yang secara matematis. Saya akan mencoba melakukan itu, setidaknya untuk bilangan bulat, dan saya akan membahas beberapa latar belakang yang mungkin sudah lazim.
Ingat cara kerjanya untuk desimal:
2345
adalah cara penulisan
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0 .
Dengan cara yang sama, biner adalah cara menulis angka menggunakan hanya 0 dan 1 mengikuti ide umum yang sama, tetapi mengganti 10s di atas dengan 2s. Kemudian dalam biner,
1111
adalah cara penulisan
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
dan jika Anda berhasil, itu ternyata sama dengan 15 (basis 10). Itu karena itu
8 + 4 + 2 + 1 = 15.
Ini semua baik dan bagus untuk angka positif. Ini bahkan berfungsi untuk angka negatif jika Anda bersedia menempelkan tanda minus di depannya, seperti halnya manusia dengan angka desimal. Itu bahkan bisa dilakukan di komputer, semacam, tapi saya belum melihat komputer seperti itu sejak awal tahun 1970-an. Saya akan meninggalkan alasan untuk diskusi yang berbeda.
Untuk komputer ternyata lebih efisien menggunakan representasi komplemen untuk angka negatif. Dan inilah sesuatu yang sering diabaikan. Notasi pelengkap melibatkan semacam pembalikan digit angka, bahkan nol tersirat yang datang sebelum angka positif normal. Itu aneh, karena muncul pertanyaan: semuanya? Itu bisa menjadi jumlah digit yang tak terbatas untuk dipertimbangkan.
Untungnya, komputer tidak mewakili ketidakterbatasan. Angka dibatasi pada panjang tertentu (atau lebar, jika Anda suka). Jadi mari kita kembali ke bilangan biner positif, tetapi dengan ukuran tertentu. Saya akan menggunakan 8 digit ("bit") untuk contoh-contoh ini. Jadi angka biner kita akan menjadi
00001111
atau
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
Untuk membentuk komplemen negatif 2, pertama-tama kita melengkapi semua digit (biner) untuk membentuk
11110000
dan menambahkan 1 ke bentuk
11110001
tetapi bagaimana kita memahami bahwa artinya -15?
Jawabannya adalah kita mengubah arti bit orde tinggi (yang paling kiri). Bit ini akan menjadi 1 untuk semua angka negatif. Perubahannya adalah dengan mengubah tanda kontribusinya pada nilai nomor yang muncul. Jadi sekarang 11110001 kita dipahami mewakili
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Perhatikan bahwa "-" di depan ungkapan itu? Ini berarti bahwa bit tanda membawa bobot -2 7 , yaitu -128 (basis 10). Semua posisi lain mempertahankan bobot yang sama dengan yang mereka miliki dalam angka biner yang tidak ditandatangani.
Mengetahui -15 kami adalah
-128 + 64 + 32 + 16 + 1
Cobalah di kalkulator Anda. ini -15.
Dari tiga cara utama yang saya lihat angka negatif terwakili di komputer, komplemen 2's menang dengan mudah untuk kenyamanan dalam penggunaan umum. Ini memiliki keanehan. Karena ini biner, harus ada beberapa kombinasi bit yang mungkin. Setiap angka positif dapat dipasangkan dengan negatifnya, tetapi hanya ada satu nol. Meniadakan nol membuat Anda nol. Jadi ada satu kombinasi lagi, angka dengan 1 di bit tanda dan 0 di tempat lain. Angka positif yang sesuai tidak akan sesuai dengan jumlah bit yang digunakan.
Yang lebih aneh dari angka ini adalah jika Anda mencoba membentuk positifnya dengan melengkapi dan menambahkannya, Anda akan mendapatkan angka negatif yang sama kembali. Tampaknya wajar bahwa nol akan melakukan ini, tetapi ini tidak terduga dan sama sekali bukan perilaku yang biasa kita lakukan karena komputer disamping, kita biasanya memikirkan persediaan angka yang tidak terbatas, bukan aritmatika dengan panjang tetap ini.
Ini seperti puncak gunung es keanehan. Masih ada lagi yang menunggu di bawah permukaan, tapi itu sudah cukup untuk diskusi ini. Anda mungkin dapat menemukan lebih banyak jika Anda meneliti "overflow" untuk aritmatika titik tetap. Jika Anda benar-benar ingin masuk ke dalamnya, Anda mungkin juga meneliti "modular arithmetic".