Pada sistem bilangan desimal untuk mendefinisikan suatu nilai bilangan yang kurang dari nol ialah dengan menggunakan tanda minus. Namun pada sistem bilangan biner (binary) hal tersebut menjadi lebih rumit, karena semua representasi nilai dengan menggunakan nilai logika satu atau nol. Sebuah komputer hanya mengenali nilai 'on' (High atau 1) dan 'off' (Low atau 0), secara default tidak mengenali nilai minus begitu saja. Terdapat dua metode yang digunakan untuk menyelesaikan persoalan tersebut yakni dengan notasi one's complement dan two’s complement.
One's Complement
Ketika merepresentasikan sebuah angka negatif dalam notasi one’s complement, sangatlah penting untuk mengetahui terlebih dulu jumlah bit yang digunakan untuk merepresentasikan suatu angka tersebut. Semisal, untuk merepresentasikan nilai -20 dalam notasi one’s complement melalui langkah-langkah sebagai berikut.
- Pertama, mengubah dari desimal menjadi biner dengan nilai yang sama, contohnya (20) = (00010100)2
- Selanjutnya ialah membalik nilai dari tiap-tiap bit, 1 menjadi 0 dan 0 menjadi 1, contohnya (00010100)2 dibalik menjadi (11101011)2
Two's Complement
Notasi one's complement memang berhasil merepresentasikan suatu nilai minus, namun bukan berarti sempurna tanpa celah. Kelemahan fatal dari notasi one's complement ialah bila menggunakan metode ini maka akan didapati dua buah nilai 0, yakni 0 negatif dan 0 positif.
Oleh karena itu dikembangkan metode baru untuk mengatasi kelamahan tersebut, yakni two's complement. Secara garis besar hampir sama dengan one's complement, namun terdapat langkah tambahan yakni dengan menambahkan 1 bit pada LSB, Least Significant Bit. Berikut ini ialah contohnya.
- Pertama, mengubah dari desimal menjadi biner dengan nilai yang sama, contohnya, (20) = (00010100)2
- Selanjutnya, membalik nilai tiap-tiap bit, 1 menjadi 0 dan 0 menjadi 1, contohnya, (00010100)2 dibalik menjadi (11101011)2
- Langkah terakhir ialah dengan menambahkan satu bit pada LSB, (11101011)2 ditambah 1 bit menjadi (11101100)2
Dalam sistem komputer, untuk membedakan suatu nilai itu positif atau negatif, digunakan flag register yakni SF, Signed Flag. Bila SF bernilai 1, maka nilai yang ditunjukkan ialah nilai negatif, sebaliknya ialah nilai positif.
Terdapat trick yang lebih mudah dalam menggunakan notasi two's complement. Selain dengan cara yang telah disebutkan, ada satu cara yang lebih mudah dalam merepresentasikan nilai minus dengan two's complement. Kembali dengan contoh nilai -20.
- Pertama, ubah dulu nilai desimal 20 ke nilai biner menjadi 000101002
- Amati dari LSB, Least Significant Bit, bit paling kecil yang paling kanan
- Dari LSB cari bit pertama yang bernilai 1, bila tidak ditemukan geser ke bit di sebelah kirinya.
- Dari 000101002, bit satu yang pertama ada pada bit yang ke-3 dari LSB
- Tulis saja tiga pertama bit tersebut (100) pada bagian notasi two's complement
- Setelah ditemukan bit bernilai 1 yang pertama, selanjutnya semua bit yang ada di sisi kirinya dibalik nilainya
- Sehingga bit ke-4 sampai yang ke-8 diubah dari 000102 menjadi 111012
- Gabungan keduanya bit 1 sampai 3 dengan bit 4 sampai 8, menjadi 111011002