Jelaskan mengapa x == ~(~x + 1) + 1 (komplemen dua dan sebaliknya!)

Seperti yang kita ketahui bersama, biasanya bilangan negatif dalam ingatan direpresentasikan sebagai bilangan komplemen dua seperti itu

from x to ~x + 1

dan untuk kembali kami tidak melakukan hal yang sudah jelas seperti

~([~x + 1] - 1)

tapi sebaliknya kita melakukannya

~[~x + 1] + 1

dapatkah seseorang menjelaskan mengapa itu selalu berhasil? Saya rasa saya dapat membuktikannya dengan angka 1-bit, 2-bit, 3-bit dan kemudian menggunakan induksi Matematika tetapi itu tidak membantu saya memahami cara kerjanya.

Terima kasih!


person Solar Dia    schedule 06.11.2015    source sumber
comment
Terkait: Bagaimana cara membuktikan bahwa pernyataan C -x, ~x+1, dan ~(x-1) memberikan hasil yang sama? identitas pelengkap 2 lainnya.   -  person Peter Cordes    schedule 06.12.2020


Jawaban (2)


Lagipula itu sama saja. Artinya, ~x + 1 == ~(x - 1). Tapi mari kita kesampingkan hal itu untuk saat ini.

f(x) = ~x + 1 adalah kebalikannya sendiri. Bukti:

~(~x + 1) + 1 =
(definition of subtraction: a - b = ~(~a + b))
x - 1 + 1 =
(you know this step)
x

Juga, ~x + 1 == ~(x - 1). Mengapa? Dengan baik,

~(x - 1) =
(definition of subtraction: a - b = ~(~a + b))
~(~(~x + 1)) =
(remove double negation)
~x + 1

Dan definisi pengurangan (yang sedikit tidak biasa), a - b = ~(~a + b)?

~(~a + b) =
(use definition of two's complement, ~x = -x - 1)
-(~a + b) - 1 =
(move the 1)
-(~a + b + 1) =
(use definition of two's complement, ~x = -x - 1)
-(-a + b) =
(you know this step)
a - b
person harold    schedule 06.11.2015
comment
itu sempurna. saya kesulitan menghapus tanda kurung dengan benar di sana. dimana saya bisa membaca tentang definisi pengurangan lebih detail? - person Solar Dia; 07.11.2015
comment
@SolarDia Saya tidak tahu tapi saya menambahkan bukti untuk itu juga, tapi mungkin sekarang berubah sedikit melingkar.. - person harold; 07.11.2015
comment
terima kasih pak, ini tidak melingkar dan terlihat sangat konsisten. definisi komplemen dua -› definisi pengurangan -› ~(~x + 1) + 1 == x tidak yakin apakah itu adil untuk dilakukan tetapi saya suka itu) akan memberikan komentar ini ketika saya mendapatkan reputasi yang cukup. - person Solar Dia; 09.11.2015

Ini karena jika Anda menambah ~x (dengan asumsi tidak ada overflow). Kemudian mengonversinya kembali ke x, Anda bertambah relatif terhadap ~x, tetapi berkurang relatif terhadap x. Hal yang sama berlaku sebaliknya. Dengan asumsi variabel x Anda memiliki nilai tertentu, setiap kali Anda menaikkannya, relatif terhadap ~x Anda akan melihatnya berkurang.

Dari sudut pandang seorang programmer, pada dasarnya inilah yang Anda saksikan.

Let short int x = 1         (0x0001)
then ~x = 65534             (0xFFFE)
~x + 1 =  65534 + 1         (0xFFFF)
~(~x+1) = 0                 (0x0000)
~(~x+1) + 1 = 0 + 1         (0x0001)
person Iancovici    schedule 06.11.2015