ว่าด้วยเรื่องจำนวนและัตัวเลข 1

ตัวเลขในคอมพิวเตอร์ ล้วนประกอบขึ้นด้วยเลขฐานสอง

เช่น  เลข 010 = 00000000 000000002

110 = 00000000 000000012

210 = 00000000 000000102

310 = 00000000 000000112

ไปจนถึง

6553510 = 11111111 111111112

การผสมกันของบิต 0 กับ 1 รูปแบบข้างบนนี้   เป็นการเก็บตัวเลข ของชนิดข้อมูล unsigned int ใน Turbo C++

ชนิดข้อมูล unsigned int นี้ คือ ชนิดข้อมูลที่เป็นตัวเลข ศูนย์และจำนวนเต็มบวก คือตั้งแต่ 0 จนถึง 65535

แต่ถ้าเป็นชนิดข้อมูลแบบ int จะเป็นชนิดข้อมูลที่เป็นตัวเลข ศูนย์ จำนวนเต็มบวก และจำนวนเต็มลบ คือ ตั้งแต่ -32768 จนถึง 32767

ทั้งข้อมูลชนิด unsigned int และ แบบ int จะสามารถเก็บตัวเลขได้ 65536 กรณีเท่ากัน

นั่นก็เพราะว่า ชนิดข้อมูล unsigned int และ int ล้วนประกอบด้วย รูปแบบ 16 bits ซึ่งมีขนาด 2 bytes

และจำนวนที่สามารถเก็บข้อมูลไ้ด้ คือ 216 = 65536 ตัวเลข(ที่ไม่ซ้ำกัน)

ส่วนกรณีชนิดข้อมูลแบบ int ที่สามารถมีค่าเป็นจำนวน – ได้นั้น คอมพิวเตอร์จะมีวิธีเก็บข้อมูล ต่างจากแบบ unsigned int เล็กน้อย เพราะ บิต 0 และ 1 ไม่สามารถใส่เครื่องหมาย – ลงไปได้ ดังนั้นจึงมีวิธีเก็บข้อมูลแตกต่างออกไป

วิธีการก็มีดังนี้

1. แปลงเลขฐาน 10 ที่ต้องการเก็บ ไปเป็นเลขฐาน 2

2. กลับบิต จาก 0 เป็น 1     และ จาก 1 เป็น 0

3. นำไปบวกด้วย 1 แบบ ไบนารี

เช่น ต้องการเก็บค่า -32 ลงใน ตัวแปรชนิด int

เนื่องจาก 3210 = 00000000 001000002

กลับบิต           ->11111111 110111112

บวกด้วย 1       ->11111111 111000002

มีค่าเท่ากับ 65504 ในรูปแบบตัวแปร unsigned int

แต่จะมีค่าเท่ากับ -32 ในรูปแบบตัวแปร int

หลักการคือ

1 1111111     111000002 = -32 (รูปแบบ int)

^ บิตตัวแรกสุด จะทำหน้าที่แยกตัวเลขนั้นๆ ว่า เป็นเครื่องหมาย + หรือ –    โดย ถ้าเป็น 0 คือ + , 1 คือ -

หลักการนี้ เรียกว่า two’s complement

แหล่งข้อมูล http://sot.swu.ac.th/CP341/lesson01/cs2t1.htm

Last 5 posts by mishell

Leave a Reply