Di artikel sebelumnya, kita mempelajari bagaimana komputer menyimpan angka dan bit pertama menyimpan tanda.

Jadi, misalkan kita menghitung 3 & -3. Jika 3 dan -3 dinyatakan sebagai bilangan biner, maka akan terlihat seperti di bawah ini:

+3 => 00000011
-3 => 10000011

Karena ini adalah operator &(AND), hasilnya adalah 00000011, jadi apakah Anda berharap mendapatkan 3?

Jika Anda menjalankan 3 & -3 di REPL Node.js yang sebenarnya, hasilnya adalah 1.

Apa? Apa yang terjadi?

Besaran yang Ditandatangani

Pertama, metode mengekspresikan tanda dengan 1 bit teratas dan nilai absolut bilangan bulat dengan bit sisanya disebut Signed Magnitude.

Saat menyatakan bilangan negatif di komputer, komputer tidak menggunakan besaran bertanda.

Ini intuitif dari sudut pandang seseorang, tetapi ada masalah jika hasil perhitungannya salah.

Contohnya, jika kamu menyelesaikan 3 + (-3) dengan magnitudo bertanda, kamu akan mendapatkan -6, yang merupakan nilai yang sangat berbeda dengan jawaban benar 0, seperti yang ditunjukkan di bawah ini:

+3 => 00000011
-3 => 10000011 +
— — — — — — — — — —
10000110 => -6

Jadi, komputer tidak menggunakan besaran bertanda ketika menyatakan bilangan negatif.

Besaran bertanda adalah salah satu cara komputer menyatakan angka negatif. Salah satu cara berarti masih ada cara lain, bukan?

Cara lainnya adalah komplemen 1 dan komplemen 2.

Melengkapi

Komplemen artinya jumlah suplemen. Untuk memahami komplemen, kita harus melihat sistem bilangan.

Dalam sistem bilangan N (sistem desimal, sistem biner, dll…), terdapat komplemen N dan komplemen N-1.

Komplemen N

Definisi komplemen N adalah:

Jika Anda menambahkan b ke sembarang bilangan a dan Anda mendapatkan bilangan sistem bilangan N, maka b disebut komplemen N dari a.

For examples, if 1 + b = 10, then b(=9) is 10’s complement of 1

Komplemen N-1

Definisi komplemen N-1 adalah:

Jika Anda menambahkan b ke sembarang bilangan a dan [bilangan N sistem bilangan-1] dibuat, maka b disebut komplemen N-1 dari a.

For examples, if 1 + b = 9(10–1), then b(=8) is 9’s complement of 1

Dengan kata lain komplemen N adalah komplemen N-1 +1.

Sekarang setelah kita mengetahui tentang komplemen, mari kita lihat apa yang dimaksud dengan komplemen 1.

komplemen 1

Komplemen 1 adalah menyatakan bilangan negatif dengan membalik semua bit bilangan positif tersebut.

Misalnya, jika 3 dinyatakan sebagai bilangan biner menggunakan komplemen 1, maka diperoleh hasil sebagai berikut:

+3 => 00000011 => 1의 보수 법 적용 => 11111100 => -3

Dengan menggunakan komplemen 1 diperoleh hasil 3 + (-3) adalah 0 yang merupakan jawaban benar.

Jadi semua masalah terselesaikan? Sayangnya, jawabannya adalah tidak.

Komplemen 1 menyelesaikan permasalahan komputasi pada besaran tanda, namun terdapat permasalahan dimana terdapat dua nilai yang merepresentasikan 0 (seperti pada besaran tanda).

+0 => 00000000
-0 => 11111111

Selain itu, ada masalah end-around-carry yang terjadi saat penambahan.

end-around-carry

end-around-carry berarti situasi di mana hasil -0 + 1 adalah +0, jadi Anda perlu menambahkan 1 lagi untuk mendapatkan nilai yang tepat.

1110 => -1
1111 => -0
0000 => 0

Masalah tersebut tidak terselesaikan dengan besaran tanda dan komplemen 1, sehingga keluarlah komplemen 2.

Komputer menggunakan komplemen 2 ini untuk menyatakan bilangan negatif.

komplemen 2

Komplemen 2 adalah menyatakan bilangan negatif dengan menambahkan 1 pada komplemen 1.

Misalnya hasil dari 3 dengan komplemen 2 adalah:

Use 1’s complement -3 => 11111100
Adding 1 to 1’s complement 11111100 + 1 => 11111101
The result -3 => 11111101

Kesimpulan

Komputer menggunakan komplemen 2 ketika menyatakan bilangan negatif. Jadi hasil 3 & -3 adalah 1.

+3 => 00000011
-3 => 11111101
3 & (-3) => 00000001 => 1

Jika Anda merasa ini bermanfaat, silakan klik tombol tepuk 👏 di bawah beberapa kali untuk menunjukkan dukungan Anda kepada penulis 👇

🚀 Bergabunglah dengan FAUN & dapatkan cerita serupa di kotak masuk Anda setiap minggu