การแทนจำนวนมีเครื่องหมาย

การแทนจำนวนมีเครื่องหมาย () เป็นวิธีการแทนจำนวนที่อาจติดลบได้ในหน่วยความจำ เพื่อให้สะดวกต่อการนำมาดำเนินการต่าง ๆ และมีประสิทธิภาพ วิธีการโดยทั่วไปคือแบ่งพื้นที่ออกเป็นสองส่วน โดยในส่วนแรกนั้นจะเป็นส่วนที่เรียกว่า Magnitude หรือค่าขนาดของบิตตัวเลข มีตำแหน่งอยู่ที่สามนับจากขวา และส่วนที่สองจะเรียกว่า Signed Bit หรือค่าขนาดหนึ่งบิตแทนเครื่องหมายบวกหรือลบ หรือเรียกสั้น ๆ ว่าบิตเครื่องหมาย โดยที่บิตเครื่องหมายนี้จะมีค่าเป็นบิตสูงสุด มีตำแหน่งอยู่หน้าสุด ดังนั้นในตัวเลขดิจิทัลหนึ่งตัวสามารถที่จะแทนได้ทั้งค่าบวก และค่าลบ ซึ่งถ้าบิตเครื่องหมายเป็น 0 ค่าของบิตสูงสุดจะมีค่าเป็นบวก แต่ถ้าบิตเครื่องหมายเป็น 1 ค่าของบิตสูงสุดจะมีค่าเป็นลบ ไม่ว่าบิตเครื่องหมายจะเป็น 0 หรือ 1 ก็ตามค่าขนาดของบิตจะเหมือนเดิม ดังตัวอย่างต่อไปนี้

ตัวอย่างที่ 1
 +12 = 0000 1100
 -12 = 1000 1100

ตัวอย่างที่ 2
 +20 = 0001 0100
 -20 = 1001 0100

จากตัวอย่างจะเป็นการแทนค่าตัวเลขดิจิทัลแบบ Sign-Magnitude System หลังจากที่ได้ดูตัวอย่างแล้วจะพบว่าความแตกต่างระหว่างบวกและลบ เช่น +12 และ -12 จะแตกต่างกันเพียงค่าของบิตเครื่องหมายเท่านั้น ส่วนค่าขนาดของบิตจะมีค่าเท่ากัน ถึงแม้ว่าระบบเลขดิจิทัลแบบนี้จะสามารถแทนค่าบวกและค่าลบได้ แต่ในการคำนวณของเครื่องคิดเลขจะไม่สามารถใช้คำนวณระบบนี้ได้

 ส่วนเติมเต็มหนึ่ง 
ส่วนเติมเต็มหนึ่ง (1’s Complement) เป็นการเปลี่ยนค่าสถานะของบิตเครื่องหมาย คือถ้าบิตเครื่องหมายเป็น 1 ให้เปลี่ยนเป็น 0 และถ้าบิตเครื่องหมายเป็น 0 ให้เปลี่ยนเป็น 1 โดยที่จะทำการเปลี่ยนสถานะทุกบิตกลับกันทั้งหมด ตามตัวอย่างต่อไปนี้

ตัวอย่างที่ 1
 +12 = 0000 1100
 -12 = 1111 0011 (ส่วนเติมเต็มหนึ่ง)

ตัวอย่างที่ 2
 +18 = 0001 0010
 -18 = 1110 1101 (ส่วนเติมเต็มหนึ่ง)

 ส่วนเติมเต็มสอง 
ส่วนเติมเต็มสอง (2’s Complement System) เป็นเหมือนกับส่วนเติมเต็มหนึ่ง แต่หลังจากได้ผลลัพธ์มาแล้วให้บวกค่าเพิ่มเข้าไปอีก 1 การทำเช่นนี้เป็นการปรับปรุงเพิ่มเติมต่อจากส่วนเติมเต็มหนึ่งเพื่อให้มีค่า 0 เพียงแค่ค่าเดียว และทำให้ไม่ต้องเพิ่มค่าบิตที่ล้นกลับเข้าไปเหมือนที่ต้องทำในการทำส่วนเติมเต็มหนึ่ง ระบบส่วนเติมเต็มสองสามารถทำได้โดยถ้าเป็นเลขบวกไม่ต้องเปลี่ยนค่าสถานะของบิตเครื่องหมาย แต่ถ้าเป็นเลขลบ ให้ทำการกลับค่าโดยการทำส่วนเติมเต็มหนึ่งทุกบิต และบวก 1 เสมอตามตัวอย่างต่อไปนี้

ตัวอย่างที่ 1
 +12 = 0000 1100
 -12 = 1111 0011 (ส่วนเติมเต็มหนึ่ง)
 1111 0011 + 1
 -12 = 1111 0100 (ส่วนเติมเต็มสอง)

ตัวอย่างที่ 2
 +16 = 0001 0000
 -16 = 1110 1111 (ส่วนเติมเต็มหนึ่ง)
 1110 1111 + 1
 -16 = 1111 0000 (ส่วนเติมเต็มสอง)

 ตารางเปรียบเทียบ 
ตารางต่อไปนี้แสดงจำนวนเต็มบวกและลบที่สามารถแทนได้ในระบบ 4 บิตแบบต่าง ๆ

+ การแทนจำนวนเต็ม 4 บิต ฐานสิบ ไม่มีเครื่องหมาย เครื่องหมายกับขนาด ส่วนเติมเต็มหนึ่ง ส่วนเติมเต็มสอง เอกซ์เซสส์-7 (ตั้งจุด) ฐานลบสอง+16          +15     1111     +14     1110     +13     1101     +12     1100     +11     1011     +10     1010     +9     1001     +8     1000    1111 +7     0111 0111 0111 0111 1110 +6     0110 0110 0110 0110 1101 +5     0101 0101 0101 0101 1100 0101+4     0100 0100 0100 0100 1011 0100+3     0011 0011 0011 0011 1010 0111+2     0010 0010 0010 0010 1001 0110+1     0001 0001 0001 0001 1000 0001+0    0000 0000 0000 0000 0111 0000−0     1000 1111−1      1001 1110 1111 0110 0011−2      1010 1101 1110 0101 0010−3      1011 1100 1101 0100 1101−4      1100 1011 1100 0011 1100−5      1101 1010 1011 0010 1111−6      1110 1001 1010 0001 1110−7      1111 1000 1001 0000 1001−8        1000  1000−9          1011−10          1010−11          

หมวดหมู่:วงจรดิจิทัล
หมวดหมู่:วิทยาการคอมพิวเตอร์
หมวดหมู่:เลขคณิตฐานสอง
หมวดหมู่:ระบบเลข