Saya menonton video ini pada nilai maksimum dan minimum dari bilangan bulat yang ditandatangani.
Ambil contoh nilai bertanda positif - 0000 0001 Bit pertama menunjukkan bahwa angka tersebut positif dan 7 bit terakhir adalah angka itu sendiri. Sehingga mudah diartikan sebagai +1.
Sekarang ambil contoh nilai ditandatangani negatif - 1000 0000 yang keluar menjadi -8. Oke, komputer dapat memahami bahwa ini adalah nilai negatif karena bit pertama tetapi bagaimana sih yang mengerti bahwa 000 0000 berarti -8?
Secara umum, bagaimana nilai-nilai bertanda negatif disimpan / diinterpretasikan dalam komputer?
c
memory
bitwise-operators
bit
dibahas tiga
sumber
sumber
Jawaban:
Standar C tidak mengamanatkan cara tertentu untuk mewakili angka bertanda negatif.
Dalam sebagian besar implementasi yang mungkin Anda temui, bilangan bulat bertanda negatif disimpan dalam apa yang disebut pelengkap dua . Cara utama lainnya untuk menyimpan angka bertanda negatif disebut pelengkap seseorang .
Komplemen dua angka N-bit
x
didefinisikan sebagai2^N - x
. Sebagai contoh, komplemen keduanya 8-bit1
adalah2^8 - 1
, atau1111 1111
. Kedua komplemen dari 8-bit8
adalah2^8 - 8
, yang dalam biner1111 1000
. Ini juga dapat dihitung dengan membalik bitx
dan menambahkan satu. Sebagai contoh:Komplemen seseorang dari angka N-bit x didefinisikan sebagai x dengan semua bitnya dibalik, pada dasarnya.
Pelengkap dua memiliki beberapa keunggulan dibandingkan pelengkap seseorang. Misalnya, tidak memiliki konsep 'nol negatif', yang karena alasan yang baik membingungkan banyak orang. Penambahan, perkalian dan pengurangan bekerja sama dengan bilangan bulat yang ditandatangani diimplementasikan dengan dua bilangan bulat yang dilengkapi dengan bilangan bulat yang tidak ditandatangani juga.
sumber
Ada tiga metode terkenal untuk mewakili nilai negatif dalam biner:
Ditandatangani besarnya . Ini adalah yang termudah untuk dipahami, karena berfungsi sama seperti yang biasa kita gunakan ketika berhadapan dengan nilai desimal negatif: Posisi pertama (bit) mewakili tanda (0 untuk positif, 1 untuk negatif), dan bit lain mewakili angka . Meskipun mudah bagi kita untuk memahami, sulit bagi komputer untuk bekerja dengannya, terutama ketika melakukan aritmatika dengan angka negatif.
Dalam 8-bit magnitude, nilai 8 direpresentasikan sebagai 0 0001000 dan -8 sebagai 1 0001000.
Pelengkap seseorang . Dalam representasi ini, angka negatif dibuat dari angka positif yang sesuai dengan membalik semua bit dan bukan hanya bit tanda. Ini membuatnya lebih mudah untuk bekerja dengan angka negatif untuk komputer, tetapi memiliki komplikasi bahwa ada dua representasi berbeda untuk +0 dan -0. Membalikkan semua bit membuat ini lebih sulit untuk dipahami manusia.
Dalam komplemen 8-bit seseorang, nilai 8 direpresentasikan sebagai 00001000 dan -8 sebagai 11110111.
Dua komplemen . Ini adalah representasi paling umum yang digunakan saat ini untuk bilangan bulat negatif karena ini adalah yang termudah untuk bekerja dengan komputer, tetapi juga yang paling sulit dipahami oleh manusia. Ketika membandingkan pola bit yang digunakan untuk nilai negatif antara komplemen seseorang dan komplemen dua, dapat diamati bahwa pola bit yang sama dalam komplemen dua mengkodekan untuk angka yang lebih rendah berikutnya. Misalnya 11111111 berarti -0 dalam komplemen seseorang dan untuk -1 dalam komplemen dua, dan juga untuk 10000000 (-127 vs -128).
Dalam komplemen 8-bit two, nilai 8 direpresentasikan sebagai 00001000 dan -8 sebagai 11111000.
sumber
Bilangan bulat yang ditandatangani disimpan menggunakan http://en.wikipedia.org/wiki/Two%27s%20complement
Maka Anda mendapatkan:
Pada dasarnya ini adalah penghitungan yang sangat mudah, Anda menghitung hingga setengah maks integer yang ditandatangani. Lakukan +1, membuatnya negatif dan mulai menghitung mundur.
sumber