Foundationপ্রথম নীতি থেকে
LEVEL 1 · How Computers Represent Information

Two's Complement

টু'জ কমপ্লিমেন্ট

ঋণাত্মক সংখ্যা লেখার প্রায়-universal scheme — negation হলো `~x + 1`, আর এটা আসলে ℤ_(2ⁿ)-এ additive inverse নেওয়া মাত্র।

Sign-magnitude আর one’s complement-এর “দুইটা শূন্য” সমস্যা এড়িয়ে, two’s complement একটামাত্র শূন্য রাখে আর n-bit-এ range দেয় -2ⁿ⁻¹ থেকে 2ⁿ⁻¹ - 1অসামঞ্জস্য (৮ bit-এ -128..127, +128 নেই), কারণ শূন্য শুধু একবার গোনা হয়।

গভীরতম insight: n-bit two’s complement আসলে [[modular-arithmetic]]-এর ℤ_(2ⁿ) — একই bit pattern একই সাথে একটা unsigned মান আর একটা signed মান, শুধু ভিন্ন প্রতিনিধি বেছে নেওয়া equivalence class। এই কারণেই hardware-এ addition/ subtraction-এর জন্য মাত্র একটাই adder circuit লাগে, signed আর unsigned দুইয়ের জন্যই — circuit শুধু bit pattern-এর উপর কাজ করে, “signed কি না” জানার দরকারই হয় না।

8-bit-এ -5-এর bit pattern বের করা: 5 = 00000101, বিট উল্টে (~) 11111010, +1 করে 11111011 — যা -8+64+32+16+ 8+2+1 = -5 (MSB-ওজন -2⁷ ধরে যাচাই করলে মেলে)।

C++20 থেকে two’s complement-ই একমাত্র বৈধ signed integer representation বাধ্যতামূলক (ISO/IEC 14882:2020 §6.8.1)।