Có hai lý do tại sao bạn nên quan tâm đến các loại dữ liệu số khác nhau.
1. Tiết kiệm bộ nhớ
for(long k=0;k<=10;k++)
{
//stuff
}
Tại sao sử dụng lâu khi nó có thể dễ dàng là một số nguyên, hoặc thậm chí là một byte? Bạn thực sự sẽ tiết kiệm một vài byte bộ nhớ bằng cách làm như vậy.
2. Số dấu phẩy động và số nguyên được lưu trữ khác nhau trong máy tính
Giả sử chúng ta có số 22 được lưu trong một số nguyên. Máy tính lưu số này vào bộ nhớ dưới dạng nhị phân:
0000 0000 0000 0000 0000 0000 0001 0110
Nếu bạn không quen thuộc với hệ thống số nhị phân, điều này có thể được biểu thị bằng ký hiệu khoa học là: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Bit cuối cùng có thể hoặc không thể được sử dụng để cho biết số đó có phải là số âm hay không (tùy thuộc vào kiểu dữ liệu được ký hay không dấu).
Về cơ bản, nó chỉ là tổng của 2 ^ (bit place) * giá trị.
Điều này thay đổi khi bạn đang đề cập đến các giá trị liên quan đến dấu thập phân. Giả sử bạn có số 3,75 trong số thập phân. Điều này được gọi là 11.11 trong nhị phân. Chúng ta có thể biểu thị điều này như một ký hiệu khoa học là 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 hoặc, được chuẩn hóa, là 1.111 * 2 ^ 2
Tuy nhiên, máy tính không thể lưu trữ điều đó: nó không có phương pháp rõ ràng để biểu thị điểm nhị phân đó (phiên bản hệ thống số nhị phân của dấu thập phân). Máy tính chỉ có thể lưu trữ 1 và 0. Đây là nơi mà kiểu dữ liệu dấu phẩy động xuất hiện.
Giả sử sizeof (float) là 4 byte, thì bạn có tổng cộng 32 bit. Bit đầu tiên được gán "bit dấu". Không có phao không dấu hoặc đôi. 8 bit tiếp theo được sử dụng cho "số mũ" và 23 bit cuối cùng được sử dụng làm "ý nghĩa" (hoặc đôi khi được gọi là lớp phủ). Sử dụng ví dụ 3,75 của chúng tôi, số mũ của chúng tôi sẽ là 2 ^ 1 và ý nghĩa của chúng tôi sẽ là 1.111.
Nếu bit đầu tiên là 1, số âm. Nếu không, tích cực. Số mũ được sửa đổi bởi một thứ gọi là "độ lệch", vì vậy chúng ta không thể lưu trữ "0000 0010" dưới dạng số mũ. Độ lệch cho một số dấu phẩy động chính xác duy nhất là 127 và độ lệch cho độ chính xác kép (đây là nơi mà kiểu dữ liệu kép có tên của nó) là 1023. 23 bit cuối cùng được dành cho ý nghĩa. Ý nghĩa đơn giản là các giá trị cho QUYỀN của điểm nhị phân của chúng tôi.
Số mũ của chúng tôi sẽ là độ lệch (127) + số mũ (1) hoặc được biểu thị dưới dạng nhị phân
1000 0000
Ý nghĩa của chúng tôi sẽ là:
111 0000 0000 0000 0000 0000
Do đó, 3,75 được thể hiện là:
0100 0000 0111 0000 0000 0000 0000 0000
Bây giờ, hãy xem số 8 được biểu thị dưới dạng số dấu phẩy động và dưới dạng số nguyên:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Làm thế nào trên thế giới máy tính sẽ thêm 8.0 và 8? Hay thậm chí nhân chúng lên!? Máy tính (cụ thể hơn là máy tính x86) có các phần khác nhau của CPU có thêm số dấu phẩy động và số nguyên.