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)।