การแทนจำนวนมีเครื่องหมาย
บทความนี้ไม่มีการอ้างอิงจากแหล่งที่มาใด |
การแทนจำนวนมีเครื่องหมาย (อังกฤษ: 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 บิตแบบต่าง ๆ
ฐานสิบ | ไม่มีเครื่องหมาย | เครื่องหมายกับขนาด | ส่วนเติมเต็มหนึ่ง | ส่วนเติมเต็มสอง | เอกซ์เซสส์-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 | — | — | — | — | — | — |