มีเหตุผลสองประการที่คุณควรเกี่ยวข้องกับชนิดข้อมูลตัวเลขที่แตกต่างกัน
1. ประหยัดหน่วยความจำ
for(long k=0;k<=10;k++)
{
//stuff
}
ทำไมต้องใช้เวลานานเมื่อมันสามารถเป็นจำนวนเต็มได้อย่างง่ายดายหรือแม้แต่เป็นไบต์? แน่นอนคุณจะบันทึกหน่วยความจำหลายไบต์ด้วยการทำเช่นนั้น
2. ตัวเลขจุดลอยตัวและตัวเลขจำนวนเต็มจะถูกเก็บไว้ในคอมพิวเตอร์ต่างกัน
สมมติว่าเรามีหมายเลข 22 เก็บไว้ในจำนวนเต็ม คอมพิวเตอร์จัดเก็บหมายเลขนี้ในหน่วยความจำในรูปแบบไบนารีเป็น:
0000 0000 0000 0000 0000 0000 0001 0110
หากคุณไม่คุ้นเคยกับระบบเลขฐานสองคุณสามารถแสดงสัญลักษณ์ทางวิทยาศาสตร์ได้เป็น: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0 บิตสุดท้ายอาจใช้หรือไม่ใช้เพื่อระบุว่าจำนวนเป็นลบหรือไม่ (ขึ้นอยู่กับประเภทของข้อมูลที่ลงชื่อหรือไม่ได้ลงชื่อ)
โดยพื้นฐานแล้วมันเป็นเพียงผลรวมของค่า 2 ^ (บิต) *
การเปลี่ยนแปลงนี้จะเกิดขึ้นเมื่อคุณอ้างถึงค่าที่เกี่ยวข้องกับจุดทศนิยม สมมติว่าคุณมีตัวเลข 3.75 เป็นทศนิยม สิ่งนี้เรียกว่า 11.11 ในไบนารี เราสามารถแสดงสิ่งนี้เป็นสัญลักษณ์ทางวิทยาศาสตร์ได้ว่าเป็น 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 หรือนัยเป็นมาตรฐานที่ 1.111 * 2 ^ 2
คอมพิวเตอร์ไม่สามารถเก็บสิ่งนั้นได้: มันไม่มีวิธีที่ชัดเจนในการแสดงจุดไบนารีนั้น (เวอร์ชันระบบเลขฐานสองของจุดทศนิยม) คอมพิวเตอร์สามารถจัดเก็บ 1 และ 0 เท่านั้น นี่คือที่มาชนิดข้อมูลจุดลอยเข้ามา
สมมติว่า sizeof (float) เท่ากับ 4 ไบต์จากนั้นคุณมีทั้งหมด 32 บิต บิตแรกถูกกำหนดให้ "sign bit" ไม่มีลอยหรือคู่ที่ไม่ได้ลงชื่อ 8 บิตถัดไปใช้สำหรับ "เลขชี้กำลัง" และ 23 บิตสุดท้ายถูกใช้เป็น "ซิกนิฟิแคนด์" (หรือบางครั้งเรียกว่า mantissa) ใช้ตัวอย่าง 3.75 ของเราเลขชี้กำลังของเราจะเท่ากับ 2 ^ 1 และซิกนิฟิแคนด์ของเราคือ 1.111
ถ้าบิตแรกคือ 1 จำนวนจะเป็นลบ ถ้าไม่เป็นบวก เลขชี้กำลังถูกแก้ไขโดยบางสิ่งที่เรียกว่า "ความลำเอียง" ดังนั้นเราจึงไม่สามารถเก็บ "0000 0010" เป็นเลขชี้กำลัง อคติสำหรับตัวเลขทศนิยมที่มีความแม่นยำเดียวคือ 127 และอคติสำหรับความแม่นยำสองเท่า (นี่คือที่ประเภทข้อมูลสองครั้งได้รับชื่อ) คือ 1023 23 บิตสุดท้ายจะถูกสงวนไว้สำหรับซิกนิฟิแคนด์ นัยสำคัญเป็นเพียงค่าของ RIGHT ของจุดไบนารี่ของเรา
เลขชี้กำลังของเราคืออคติ (127) + เลขชี้กำลัง (1) หรือแทนด้วยเลขฐานสอง
1000 0000
ความสำคัญของเราคือ:
111 0000 0000 0000 0000 0000
ดังนั้น 3.75 จึงแสดงเป็น:
0100 0000 0111 0000 0000 0000 0000 0000
ทีนี้เรามาดูตัวเลข 8 ที่แสดงเป็นเลขทศนิยมและเลขจำนวนเต็ม:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
คอมพิวเตอร์จะเพิ่ม 8.0 และ 8 ได้อย่างไรในโลก หรือเพิ่มทวีคูณ! คอมพิวเตอร์ (โดยเฉพาะอย่างยิ่งคอมพิวเตอร์ x86) มีส่วนต่าง ๆ ของ CPU ที่เพิ่มหมายเลขทศนิยมและจำนวนเต็ม