Lưu trữ số nguyên có dấu

Một phần của tài liệu Lịch sử máy tính (Trang 30 - 31)

Trong Visual Basic, các kiểu dữ liệu số nguyên có dấu là Integer (2 ô nhớ) và Long (4 ô nhớ). Cách lưu trữ số nguyên có dấu có đôi chút phức tạp hơn so với số nguyên không dấu. Như ta đã biết qua phần trình bày về lý thuyết thiết kế mạch số, với hai mạch số cơ bản là mạch cộng bán phần và mạch cộng toàn phần, trung tâm xử lý của máy tính gần như chỉ biết thực hiện mỗi phép cộng, tất cả phép tính toán số học khác đều được qui về phép cộng : trừ là cộng với số đối, nhân là cộng nhiều lần, chia là trừ nhiều lần. Như vậy, máy tính phải có một giải pháp thỏa đáng để lưu trữ số âm sao cho : nếu x là một số dương, và y là số âm, thì phép cộng giữa x và y phải trả về giá trị ứng với .

Trở lại với cách thức lưu trữ số nguyên có dấu. Gọi x là một số nguyên có dấu, khi đó, ta có thể viết x ở dạng nếu x là số không âm, hoặc ở dạng nếu x là số âm. Điều này có nghĩa là,

một số nguyên có dấu gồm hai thành phần : phần giá trị (mantissa / giá trị tuyệt đối) và phần dấu. Giả sử máy tính sử dụng 2 ô nhớ để lưu trữ một số nguyên có dấu (như kiểu Integer), khi đó, máy tính chỉ sử dụng 15bit để lưu trữ phần giá trị và dành riêng bit ngoài cùng (bên phải) để thể hiện phần dấu (bằng 1 ứng với số âm, bằng 0 ứng với số không âm). Như vậy, khi số có dấu cần lưu trữ là số không âm thì bit ngoài cùng bên phải luôn bằng 0, nên các giá trị không âm có thể biểu

x y−

diễn được là từ 0000 0000 0000 0000 đến 0111 1111 1111 1111, nghĩa là từ 0 đến

. Nhưng, điều này không có nghĩa là khi số cần lưu trữ là số âm, thì máy tính chỉ việc đặt bit ngoài cùng bằng 1, rồi để 15 bit còn lại biểu diễn phần giá trị giống như cách biểu diễn số không âm. Để giải thích lý do tại sao ta hãy xem ví dụ sau.

Giả sử cần lưu trữ hai số nguyên có dấu là 5 và −5. Số 5 đương nhiên sẽ được lưu trữ bởi dãy bit 0000 0000 0000 0101. Tuy nhiên, nếu máy tính lưu trữ số −5 bởi dãy bit 1000 0000 0000 0101 thì vấn đề nảy sinh là, khi đó, phép cộng giữa hai dãy bit này sẽ cho ra kết quả là 1000 0000 0000 1010, tức là bằng −12 !

Một phần của tài liệu Lịch sử máy tính (Trang 30 - 31)