3.1.3 · Hardware › Boolean Algebra & Logic Gates
Hamare paas sirf 0 aur 1 hain — koi physical "minus sign" wire nahi hoti. Toh computer negative numbers kaise store karta hai? Two's complement ek clever trick hai: hum most significant bit (MSB) ko ek negative weight dene ke liye redefine karte hain . Yeh ek redefinition negatives ko represent karne deti hai aur saath hi addition aur subtraction dono ke liye same adder circuit reuse karne deti hai. Yahi saara magic hai: one hardware adder handles signed and unsigned .
Definition Two's complement (n-bit)
Ek n -bit two's complement number mein, bits b n − 1 b n − 2 … b 1 b 0 is value ko represent karte hain:
V = − b n − 1 ⋅ 2 n − 1 + ∑ i = 0 n − 2 b i ⋅ 2 i
Top bit (b n − 1 ) sign bit hai: 0 ka matlab non-negative, 1 ka matlab negative. Lekin yeh sirf ek flag nahi hai — yeh ek real negative weight − 2 n − 1 carry karta hai.
n bits ke liye range: [ − 2 n − 1 , 2 n − 1 − 1 ] .
Example (8-bit): [ − 128 , + 127 ] . Dhyan do yeh asymmetric hai — positives se ek zyada negative.
Intuition Odometer / wrap-around view
Ek n -bit odometer imagine karo jisme 2 n positions ek circle mein hain. Agar 0000 zero hai, toh upar jaane par 1 , 2 , 3 … milte hain aur neeche jaane par (1 subtract karo) 0000 se wrap hokar 1111 aa jaata hai. Toh 1111 naturally − 1 ki tarah behave karta hai. Hum bas agree karte hain ki circle ka top half negatives ko represent karta hai.
Formally: bits ki unsigned value U = b n − 1 2 n − 1 + ∑ i < n − 1 b i 2 i hai.
Hum chahte hain ki jab top bit set ho toh negatives milein, aur arithmetic mod 2 n ho. Toh signed value define karo:
V ≡ U ( mod 2 n ) , V ∈ [ − 2 n − 1 , 2 n − 1 − 1 ]
Jab b n − 1 = 1 ho: V = U − 2 n = ( 2 n − 1 + rest ) − 2 n = − 2 n − 1 + rest — bilkul definition wala negative weight. KYU: 2 n subtract karna ek n -bit machine ko invisible hai (woh bas top se drop ho jaata hai), toh hardware ko kabhi jaanna nahi padta ki hum U "mean" kar rahe the ya V .
Invert karne ke baad 1 add karna "off by one" ko kaise theek karta hai? ::: Kyunki x + x ˉ = 2 n − 1 (saare ones), jo 2 n se ek kam hai. 1 add karne par 2 n − x milta hai, jo − x mod 2 n hai.
10110110 (8-bit) decode karo
Top bit 1 hai → negative. Kyun: MSB weight − 128 hai.
Value = − 128 + 32 + 16 + 4 + 2 = − 128 + 54 = − 74 .
Shortcut check: isse negate karo (invert+1): 01001010 = 74 , toh original = − 74 . ✓
Worked example Negative add karke subtraction:
7 − 5
7 = 00000111, − 5 = 11111011.
Add karo: 00000111 + 11111011 = 1 00000010. Carry-out (9th bit) drop karo → 00000010 = 2 . ✓
Carry kyun discard karte hain: yeh 2 n represent karta hai, jo ≡ 0 ( mod 2 n ) hai — n bits mein invisible. Isliye one adder does both add and subtract .
100 + 50 in 8-bit signed
100 = 01100100, 50 = 00110010. Sum = 10010110 = − 106 ?! Do positives ne negative diya → overflow . Carry into MSB = 1, carry out = 0, 1 ⊕ 0 = 1 . ✓
Common mistake "Sign bit sirf ek plus/minus label hai; baaki magnitude hai."
Kyun sahi lagta hai: sign-magnitude representation mein bilkul yahi hota hai, aur yeh pehli cheez hai jo bahut log seekhte hain. Kyun galat hai: two's complement mein lower bits negative number ki magnitude nahi hoti. 11111011 − 5 hai, lekin low 7 bits 1111011 = 123 hain, na ki 5. Fix: MSB weight − 2 n − 1 carry karta hai; magnitude paane ke liye pehle negate (invert+1) karna hoga.
Common mistake "Carry-out discard karna matlab answer galat hai."
Kyun sahi lagta hai: ek bit drop karna information lose karna lagta hai. Kyun galat hai: carry-out 2 n ke barabar hai, aur 2 n ≡ 0 ( mod 2 n ) hai, toh isko discard karna signed arithmetic ke liye mathematically exact hai. Fix: signed correctness ke liye carry-out ignore karo; instead overflow ke liye C n − 1 ⊕ C n dekho.
Common mistake "Range symmetric hai, jaise
[ − 127 , + 127 ] ."
Kyun sahi lagta hai: sign-magnitude aur one's complement dono mein two zeros aur symmetric range hoti hai. Kyun galat hai: two's complement mein single zero hai, jo ek code ek extra negative ke liye free karta hai → [ − 128 , + 127 ] . Fix: yaad rakho − 2 n − 1 ka koi positive twin nahi hai (− 128 ko negate karna overflow karke waapis − 128 de deta hai).
"Flip, then bump." Negate karne ke liye: har bit F lip karo, phir 1 se b ump karo.
Range ke liye: "one more negative than positive" (128 negatives vs 127 positives).
Recall Feynman: ek 12-saal ke bacche ko explain karo
Ek clock imagine karo jisme 12 ki jagah 16 hours (0–15) hain. Aage jaana add karne jaisa hai; 0 se ek ghante peeche jaane par 15 aa jaata hai. Toh is clock par, "15" matlab "ek kadam peeche" = − 1 . Hum bas agree karte hain ki clock ke doosri taraf ke numbers (8–15) "negative" hain. Kisi number ka negative nikaalene ke liye, uss number ko clock par doosri direction mein chalao — aur yeh karne ki quick trick hai: saare switches flip karo (0↔1) aur ek add karo. Yahi two's complement hai!
n-bit two's complement mein MSB kaunsa weight carry karta hai? − 2 n − 1 (ek negative weight, sirf sign flag nahi)
n-bit two's complement number ki range kya hai? [ − 2 n − 1 , 2 n − 1 − 1 ]
8-bit two's complement number ki range kya hai? [ − 128 , + 127 ]
Two's complement mein − x kaise compute karte hain? Saare bits invert karo phir 1 add karo (kyunki x ˉ + 1 = 2 n − x ≡ − x )
Invert-and-add-1 negative kyun deta hai? x + x ˉ = 2 n − 1 , toh x ˉ + 1 = 2 n − x ≡ − x ( mod 2 n )
Signed addition mein carry-out ke saath kya karte hain? Discard kar do; yeh 2 n ≡ 0 ( mod 2 n ) ke barabar hai
Signed overflow kaise detect karte hain? Carry into MSB = carry out of MSB, yaani C n − 1 ⊕ C n = 1
11111011 (8-bit two's complement) decode karo.− 128 + 123 = − 5
Range asymmetric kyun hai? Single zero code ek extra pattern negatives ke liye free karta hai, isliye positives se ek zyada negative milta hai
8-bit mein − 128 ko negate karne par kya milta hai? Waapis − 128 (overflow — iska koi positive counterpart nahi hai)
Binary number system — unsigned foundation jis par yeh build karta hai
Sign-magnitude representation — simple alternative (two zeros, symmetric)
One's complement — beech ka step (sirf invert karo, +1 nahi)
Full adder — woh circuit jo signed add/subtract ke liye "just works"
Modular arithmetic — kyun "mod 2 n " carry ko vanish karta hai
Overflow and carry flags — ALU mein status bits
MSB negative weight -2^n-1
Range asymmetric -2^n-1 to 2^n-1 -1
Sign bit: 1 means negative
Odometer wrap-around mod 2^n
Encode: invert then add 1
One adder for add and subtract