ว่าด้วยเรื่องจำนวนและัตัวเลข 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
- ว่าด้วยเรื่องจำนวนและตัวเลข 2 - January 7th, 2010
- วิธีการสลับค่าตัวแปร โดยใช้ Bitwise Operation - July 11th, 2009
- การ modulo แบบสวยงาม ในภาษาซี - July 6th, 2009
- How to export file from open office to PDF on UBUNTU platform - July 3rd, 2009
