next up previous contents index
Next: การแปลงค่าระหว่างไบนารี่และเลขฐานสิบ Up: การคำนวณ Previous: กล่าวนำ   Contents   Index

การจัดการกับเลขบวก ลบ ในคอมพิวเตอร์

ตัวเลขสามารถแสดงในฐานใดๆ ก็ได้ ในขณะที่มนุษย์ใช้งานเลขฐานสิบเป็นหลัก ส่วนคอมพิวเตอร์นั้นชอบใช้เลขฐานสอง ในเลขฐานใดๆ ค่าของหลักที่ $i$ ที่มีค่าเท่ากับ $d$ มีค่าเท่ากับ


\begin{displaymath}
d\times Base^i
\end{displaymath} (3.1)

โดยที่ $i$ มีค่าเริ่มจากศูนย์ ที่มีการเพิ่มจากทางขวามาทางด้านซ้าย ตัวอย่างเช่น $1011_{two}$ แสดงค่า

$(1\times 2^3)+(0\times 2^2)+(1\times2^1)+(1\times2^0)_{ten}\\
= (1\times 8)+(0\times 4)+(1\times 2)+(1\times 1)_{ten}\\
= 8 + 0 + 2 + 1_{ten}\\
= 11_{ten}$

การแสดงเลข $11_{ten}$ หรือ $1011_{two}$ ในคอมพิวเตอร์ MIPS แสดงโดยเลขฐานสองขนาด 32 ดังต่อไปนี้

\includegraphics[width=5.5in]{fig/11.eps}

จากที่ข้อมูลหนึ่ง Word ที่เขียนในแนวนอนนั้นอาจเกิดความสับสนว่า เริ่มจากทางด้านใด โดยทั่วไปเรานิยาม ``Most Significant Bit'' ว่าเป็นบิตทางซ้ายมือสุด และ ``Least Significant Bit'' ว่าเป็นบิตทางขวามือสุด

ขนาด Word ของ MIPS ที่มีขนาดเท่ากับ 32 บิต สามารถแสดงตัวเลขตั้งแต่ 0 ถึง $2^{32} - 1$ $(4,294,967,295_{ten})$ เริ่มจาก

0000 0000 0000 0000 0000 0000 0000 0000 = 0 
0000 0000 0000 0000 0000 0000 0000 0001 = 1
0000 0000 0000 0000 0000 0000 0000 0010 = 2
...
1111 1111 1111 1111 1111 1111 1111 1101 = 4,294,967,293 
1111 1111 1111 1111 1111 1111 1111 1110 = 4,294,967,294 
1111 1111 1111 1111 1111 1111 1111 1111 = 4,294,967,295

ค่าในบิตต่างๆ ตามตำแหน่งสามารถแสดงค่าโดยนำค่าตำแหน่งยกกำลังสอง คูณกับบิตในค่านั้นๆ ถ้าให้ $xi$ เป็นค่าบิตในตำแหน่งที่ $i$ ค่าที่แสดงฐานสิบของ Word จะสามารถคำนวณได้จาก

$(x31 \times 2^{31})+ (x30 \times 2^{30}) + (x29 \times 2^{29}) + \ldots + (x1 \times 2^{1}) + (x0 \times 2^{0})$

การแสดงค่าตัวเลขในไบนารี่นั้นสามารถแสดงค่าได้มากกว่า การแสดงค่าตัวเลขเป็นเลขฐานสิบในรูปของ ASCII และเก็บค่า Byte เป็นตัวอักษรในหน่วยความจำ ค่าแสดงตัวเลขไบนารี่ที่แสดงขั้นต้นเป็นเพียงการแสดงค่าที่เป็นค่าเฉพาะช่วงที่คอมพิวเตอร์สามารถแสดงผลได้เท่านั้น ลองคิดดูว่าค่าตัวเลขในความเป็นจริงมีการขยายจากลบอนันต์ ถึง บวกอนันต์ คอมพิวเตอร์ สามารถแสเงค่าได้เพียงช่วงหนึ่งเท่านั้น

เมื่อคอมพิวเตอร์ทำการประมวลผลต่างๆ เช่นการบวก ลบ คูณ หาร ตัวเลขไบนารี่ต่างๆ มีความเป็นไปได้ที่ผลลัพธ์จากการคำนวณไม่สามารถแสดงได้อย่างเหมาะสมในการนำเสนอที่มีอยู่ เช่น มีค่ามากเกินกว่าที่จะบรรจุในบิตที่มีอยู่ได้ ลักษณะดังกล่าวเรียกว่าเกิด ``overflow'' ซึ่งขึ้นอยู่กับระบบปฏิบัติการ การเขียนโปรแกรม และฮาร์ดแวร์ว่าจะตัดสินใจจัดการกับ overflow อย่างไร

โปรแกรมคอมพิวเตอร์ทำการคำนวณทั้ง เลขบวก และ เลขลบ ดังนั้นคอมพิวเตอร์จะต้องมีวิธีการนำเสนอเลขให้ได้ครอบคลุมเลขทั้งสองลักษณะ โดยทั่วไป การทำงานจะใช้บิตหนึ่งบิต แสดงเป็นเครื่องหมาย โดยมีชื่อเรียกว่า ``Sign and Magnitude'' อย่างไรก็ตามการที่กำหนดหนึ่งบิตเป็นสำหรับเครื่องหมายมีความสับสนพอควร เช่น บิตเครื่องหมายจะอยู่ด้านซ้าย หรือ ด้านขวา หรือการที่มีเครื่องหมายจะเกิดศูนย์ลบ และศูนย์บวกขึ้น ซึ่งจะเกิดความสับสนในการเขียนโปรแกรมขึ้น จากปัญหาดังกล่าวการนำเสนอเลขบวกลบโดยใช้ Sign and Magnitude จึงไม่ได้รับความนิยม

ในคอมพิวเตอร์การนำเสนอมักจะใช้ two's complement representation (2's) ที่เลขบวกนำด้วย 0 และเลขลบนำด้วย 1 ดังนี้

0000 0000 0000 0000 0000 0000 0000 0000 = 0 
0000 0000 0000 0000 0000 0000 0000 0001 = 1
0000 0000 0000 0000 0000 0000 0000 0010 = 2
...
0111 1111 1111 1111 1111 1111 1111 1101 = 2,147,483,645
0111 1111 1111 1111 1111 1111 1111 1110 = 2,147,483,646
0111 1111 1111 1111 1111 1111 1111 1111 = 2,147,483,647
1000 0000 0000 0000 0000 0000 0000 0000 = -2,147,483,648  
1000 0000 0000 0000 0000 0000 0000 0001 = -2,147,483,647  
1000 0000 0000 0000 0000 0000 0000 0010 = -2,147,483,646  
...
1111 1111 1111 1111 1111 1111 1111 1101 = -3 
1111 1111 1111 1111 1111 1111 1111 1110 = -2
1111 1111 1111 1111 1111 1111 1111 1111 = -1

การนำเสนอแบบ 2's สามารถแสดงค่าเลขที่มากกว่าศูนย์จาก 0 ถึง $2,147,483,647_{ten}$ $(2^{31}-1)$ โดยที่กลุ่มของบิต $(1000\ldots 0000_{two})$ แสดงค่าลบที่น้อยที่สุด $-2,147,483,648_{ten}$ และเริ่มเพิ่มค่าเป็น จนถึง $-2,147,483,647_{ten}$ $(1000\ldots 0001_{two})$ จนถึง $-1_{ten}$ ( $1111\ldots 1111_{two})$

จะสามารถสังเกตได้ว่าค่าในเลขลบมีมากกว่าค่าในเลขบวกหนึ่งตัวคือ -2,147,483,648 ความไม่สมดุลดังกล่าวอาจมีปํญหาสำหรับนักเขียนโปรแกรม อย่างไรก็ตามถ้าเราใช้ Sign and Magnitude การออกแบบดังกล่าวมีปัญหาทั้งนักเขียนโปรแกรมและการออกแบบฮาร์ดแวร์ คอมพิวเตอร์ในปัจจุบันจึงใช้งาน 2's ในการแสดงค่าตัวเลข

ข้อดีของระบบเลข 2's คือในเลขลบทั้งหมด มีค่าของ Most Significant Bit เป็น 1 ฮาร์ดแวร์สามารถตรวจสอบเลขบวกลบได้โดยตรวจสอบจาก Most Significant Bit ซึ่งบิตนี้มักจะถูกเรียกว่า sign bit ดังนั้นเราสามารถแสดงเลขบวก และเลขลบในสมการร่วมกันได้ดังนี้

$(x31 \times -2^{31})+ (x30 \times 2^{30}) + (x29 \times 2^{29}) + \ldots + (x1 \times 2^{1}) + (x0 \times 2^{0})$

โดยที่ Sign Bit จะถูกคูณด้วย $-2^{31}$ ส่วนที่เหลือจะเหมือนกับการแปลงเลขฐานสองธรรมดา



Subsections
next up previous contents index
Next: การแปลงค่าระหว่างไบนารี่และเลขฐานสิบ Up: การคำนวณ Previous: กล่าวนำ   Contents   Index
Vara Varavithya 2006-11-06