ข้ามไปเนื้อหา

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

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

การแทนจำนวนมีเครื่องหมาย (อังกฤษ: 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    
+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