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;
Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

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/

Dương Hoàng viết 18:28 ngày 30/09/2018

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?

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

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

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.

Như biến float em thấy nó chỉ có 4byte, như vậy là có giới hạn.

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

  • 1 bít dấu
  • 8 bit thể hiện mũ 10
  • phần lẻ 23 bits

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

Như giá trị số Pi lưu trong máy tính khoảng mấy byte vậy anh?

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.

Bài liên quan
0