30/09/2018, 16:16
[Hỏi] Chuyển đổi số thực sang nhị phân và ngược lại
Chào các bác, em đang sử dụng C để viết cho vi điều khiển, em cần lưu vào bộ nhớ ngoài nên phải chuyển số thực sang nhị phân để lưu vào ô nhớ, và ngược lại để lấy giá trị nhị phân rồi tính ra số thực. Em có search thử nhưng chưa hiểu lắm về cái này, đoạn dưới là chuyển từ số thực sang nhị phân, em vẫn chưa biết cách chuyển ngược lại.
Bác nào giúp em cái này với, em xin cảm ơn.
int fl = *(int*)&floatVar; //assuming sizeof(int) = sizeof(float)
int binaryRepresentation[sizeof(float) * 8];
for (int i = 0; i < sizeof(float) * 8; ++i)
binaryRepresentation[i] = ((1 << i) & fl) != 0 ? 1 : 0;
Bài liên quan
Anh thấy có bài này ở đây đã làm này, em lấy code đó mà dùng:
http://www.cprogramto.com/c-program-convert-float-binary/
Nhân đây anh cho em hỏi khi chuyển số thập phân sang nhị phân thì nó có độ chính xác như thế nào. Như biến float em thấy nó chỉ có 4byte, như vậy là có giới hạn. Với 1 số nguyên 4 byte thì có giá trị là 4.294.967.296, vậy trong quá trình chuyển từ số thực sang binary rồi chuyển ngược lại thì số thực đó sẽ sai số như thế nào. Như giá trị số Pi lưu trong máy tính khoảng mấy byte vậy anh?
Chính xác hoàn toàn nhé, không có sai số trừ phi vượt ngưỡng chứa của int. Tức là 4 bytes. Hoặc long long là 8 bytes.
Chính xác, nhưng float còn là số không có độ chính xác cao nữa. Số thực chia ra làm 2 phần. Một phần lẻ và một phần exponent, tức là phần mũ 10. Một số thực luôn là số 0 và phần lẻ đi theo.
Ví dụ số 3,14 được hiểu là số 0,314*10^1
Hình dưới đây miêu tả hình thái của số thực
Như trong hình này thì ta thấy
Về thực tế, chỉ có 23 bits được dùng trong một số float. Thế nên độ chính xác của nó rất kém
Tùy vào độ dài của kiểu dữ liệu mà ta có thể chứa được. Nếu em dùng double thì thông thường là 8 bytes.