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 sebagai 2^N - x
. Sebagai contoh, komplemen keduanya 8-bit 1
adalah 2^8 - 1
, atau 1111 1111
. Kedua komplemen dari 8-bit 8
adalah 2^8 - 8
, yang dalam biner 1111 1000
. Ini juga dapat dihitung dengan membalik bit x
dan menambahkan satu. Sebagai contoh:
1 = 0000 0001
~1 = 1111 1110
~1 + 1 = 1111 1111
-1 = 1111 1111
21 = 0001 0101
~21 = 1110 1010
~21 + 1 = 1110 1011
-21 = 1110 1011
Komplemen seseorang dari angka N-bit x didefinisikan sebagai x dengan semua bitnya dibalik, pada dasarnya.
1 = 0000 0001
-1 = 1111 1110
21 = 0001 0101
-21 = 1110 1010
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.