Thursday, November 9, 2023

Cách float được lưu trong ARM (theo chuẩn:  IEEE-754)

float có kích thước 32 bits (4bytes)

1. Thành phần

bao gồm 3 thành phần:

sign bit: bit cao nhất (bit 31)

vị trí dấu chấm động: 8 bits tiếp theo (từ bit 30 đến bit 23) [30:23]. và được offset cho 127 (có nghĩa là trừ cho 127)

phần giá trị: từ bit 22 đến bit 0 [23:0].

2. Ví dụ

lấy số: -12.5 -> sẽ được lưu trong memory: 0xC1480000

1100 0001 0100 1000 0000 0000 0000 0000

sign bit: 1 

vị trí dấu chấm động: 100 0001 0= 130; 130 - 127 = 3

phần giá trị: 1100 1000 0000 0000 0000 0000: sẽ tự động được thêm bit 1 vào.

áp vị trí dấu chấm động vào:

1100. 1000 0000 0000 0000 0000

1100b = 12d.

có thể tính theo công thức hồi xưa học tin lớp 11: (1 × 23) + (1 × 22) + (0 × 21) + (0 × 2) = 12

. 1000 0000 0000 0000 0000 phần lẽ: (1 × 2-1) + (0 × 2-2) + (0 × 2-3) + ... = 0.5

Cộng 2 cái này lại với nhau ta có: 12 + 0.5 = 12.5 

kết hợp sign bit 1 (dấu âm) là -12.5