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

จากวิกิพีเดีย สารานุกรมเสรี

การแทนจำนวนมีเครื่องหมาย (อังกฤษ: Signed number representations) เป็นวิธีการแทนจำนวนที่อาจติดลบได้ในหน่วยความจำ เพื่อให้สะดวกต่อการนำมาดำเนินการต่าง ๆ และมีประสิทธิภาพ วิธีการโดยทั่วไปคือแบ่งพื้นที่ออกเป็นสองส่วน โดยในส่วนแรกนั้นจะเป็นส่วนที่เรียกว่า 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     N/A N/A N/A N/A N/A N/A
+15     1111 N/A N/A N/A N/A N/A
+14     1110 N/A N/A N/A N/A N/A
+13     1101 N/A N/A N/A N/A N/A
+12     1100 N/A N/A N/A N/A N/A
+11     1011 N/A N/A N/A N/A N/A
+10     1010 N/A N/A N/A N/A N/A
+9     1001 N/A N/A N/A N/A N/A
+8     1000 N/A N/A N/A 1111 N/A
+7     0111 0111 0111 0111 1110 N/A
+6     0110 0110 0110 0110 1101 N/A
+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     N/A 1001 1110 1111 0110 0011
−2     N/A 1010 1101 1110 0101 0010
−3     N/A 1011 1100 1101 0100 1101
−4     N/A 1100 1011 1100 0011 1100
−5     N/A 1101 1010 1011 0010 1111
−6     N/A 1110 1001 1010 0001 1110
−7     N/A 1111 1000 1001 0000 1001
−8     N/A N/A N/A 1000 N/A 1000
−9     N/A N/A N/A N/A N/A 1011
−10     N/A N/A N/A N/A N/A 1010
−11     N/A N/A N/A N/A N/A N/A