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 ngồ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
2.3.2.3 Cách thức lưu trữ số âm của máy tính
Trước hết ta phải làm quen với một số khái niệm. Giả sử rằng ta đang xét kiểu dữ liệu Integer, sử dụng 2 ô nhớ liên tiếp để biểu diễn 1 số nguyên có dấu.
Hiện tượng tràn số. Khi cộng hai số với nhau, mà kết quả vượt ra ngồi khả năng số ơ nhớ được sử dụng để lưu trữ
thì bit vượt ra ngồi sẽ bị chặt cụt. Ví dụ, phép cộng giữa hai số 1110 0101 0010 1110 và 1101 0010 1110 1101 sẽ cho ra kết quả là 1011 1000 0001 1011 lẽ ra phải là 1 1011 1000 0001 1011.
Số bù 1. Bù 1 của x là một số được lấy bằng cách đảo tất cả các bit trong x. Ví dụ, bù 1 của số
0010 1101 1110 0110 sẽ là 1101 0010 0001 1001. Số bù 2.
Bù 2 của x là một số được lấy bằng cách lấy bù 1 của x, rồi cộng thêm cho 1. Ví dụ, bù 2 của số 0010 1101 1110 0110 sẽ là 1101 0010 0001 1001 + 1 = 1101 0010 0001 1010.
Và cuối cùng là, số âm được lưu trữ trong máy tính dưới dạng bù 2 của phần giá trị. Ví dụ, giá trị Integer
được lưu trữ trong máy tính dưới dạng 1011 1000 0001 1010. Thực vậy, bởi vì
Tài liệu tham khảo môn Tin học 31
15
2 1 32767
− =
11750 =
11750 =
11750 −
nếu lấy 0010 1101 1110 0110 11750 cộng với 1011 1000 0001 1010, ta sẽ nhận được kết quả là 0000 0000 0000 0000, tức 0 thập phân kết quả của phép cộng này lẽ ra phải là 1 0000 0000 0000
0000, nhưng do hiện tượng tràn số xảy ra, nên bit 1 ngoài cùng bị bỏ đi. Cũng với ví dụ trên, nếu ta tiếp tục lấy bù 2 của 1101 0010 0001 1010
, ta sẽ nhận lại
được chính dãy số 0010 1101 1110 0110 ban đầu. Do đó, khơng cần phải chứng minh dài
dòng, ta có thể tin rằng, trong máy tính, bù 2 của một số chính là số đối của nó.
2.3.2.4 Lưu trữ ký tự
Trong các phần trên, ta đã khảo sát qua hai kiểu dữ liệu cơ bản là kiểu số nguyên không dấu Byte, Char, và kiểu số nguyên có dấu Integer, Long. Nhận xét rằng, cho dù là kiểu dữ liệu nào
đi chăng nữa, thì dạng thức được lưu trữ trong bộ nhớ máy tính vẫn chỉ là một dãy các bit, việc hiểu dãy bit đó là đại diện của dữ liệu gì số ngun khơng dấu, số ngun có dấu, ký tự, hay số
thực, v.v… là tùy vào chương trình đang xử lý chúng. Giả sử tại hai ơ nhớ liên tiếp nào đó trong bộ nhớ đang chứa dãy bit 1011 1000 0001 1011, nếu chương trình cho rằng hai ô nhớ này đang
chứa một số nguyên không dấu 16 bit, thì đây là giá trị 47131, còn nếu đây là số ngun có dấu 16 bit, thì đây phải là một số âm do bit ngoài cùng bên phải bằng 1, và cụ thể sau khi lấy bù 2 để
có được phần giá trị là giá trị .
Với việc lưu trữ ký tự, hay bất cứ một kiểu dữ liệu nào khác, trong máy tính cũng vậy, người ta cũng phải đưa ra một phương pháp nào đó để biểu diễn ký tự dưới dạng dữ liệu số.
Bảng mã ASCII American Standard Code for Information Interchange
Là một chuẩn qui định chuyển đổi giữa ký tự và số. Bảng mã ASCII gồm 256 ký tự ứng với các giá trị số gọi là mã ASCII từ 0 đến 255. Từ đó, khi cần lưu trữ một ký tự trong bộ nhớ, máy tính
sẽ sử dụng vừa vặn 1 ô nhớ 1 byte để lưu trữ giá trị mã ASCII của ký tự này. Bảng sau cho ta mã ASCII của một số ký tự thông dụng, bảng mã ASCII chi tiết có thể được tham
khảo ở Phụ lục . Để tránh nhầm lẫn giữa ký tự và giá trị số ký tự 0 với số 0 chẳng hạn, ta sẽ
Tài liệu tham khảo môn Tin học 32
11750 −
11750
11750 −
ghi ký tự bên trong cặp dấu ngoặc kép, qui ước này cũng là qui ước của ngôn ngữ lập trình Visual Basic.
Mã ASCII Ký tự
Mã ASCII Ký tự
… …
a “0”
b “1”
… …
… …
z “9”
… …
… …
A B
… …
Z …
…
Hầu hết các phím trên bàn phím đều ứng với một mã ASCII nào đó. Một số phím đặc biệt như enter có mã ASCII là 13, phím ESC có mã ASCII là 27, … được gọi là các ký tự đặc biệt.
Font chữ.
Font chữ là bảng các mẫu mơ tả hình dạng của các ký tự. Font chữ cần thiết khi máy tính cần trình bày dữ liệu từ bộ nhớ lên màn hình. Có thể hiểu nơm na rằng, để thể hiện một dữ liệu, nếu dữ liệu
này khơng phải là ký tự thì máy tính phải chuyển nó thành dạng chuỗi ký tự, khi đó máy tính sẽ lần lượt hiển thị từng ký tự lên màn hình, bằng cách tra trong bảng Font chữ hình dạng của nó, và
điều khiển màn hình hiển thị hình dạng này. Hình sau minh họa bảng các mẫu hình dạng ký tự của font chữ Vni-Times.
Tài liệu tham khảo môn Tin học 33
61h 01100001 =
30h 00110000 =
62h 01100002 =
31h 00110001 =
7Ah 01111010 =
39h 00111001 =
41h 01000001 =
42h 0100 0002 =
5Ah 01011010 =
Bảng trong hình trên được trích từ chức năng Insert Symbol của phần mềm Microsoft Word. Cũng trong Word, khi ta bấm một phím ứng với một ký tự bất kỳ, sau đó bấm Alt-X, thì sẽ thấy
xuất hiện mã ASCII của phím vừa bấm.
Font chữ Unicode.
Do chỉ có 256 ký tự, nên bảng mã ASCII gây nhiều hạn chế trong việc thể hiện những ký tự riêng biệt của các ngôn ngữ khác không phải tiếng Anh. Hầu hết các hệ điều hành ngày nay đều hỗ trợ
một bảng mã khác, gọi là bảng mã Unicode, có 65536 ký tư. Khi đó, mỗi ký tự có một mã
Unicode là một số ngun khơng dấu 16 bit. Số lượng ký tự khá lớn của bảng mã Unicode đủ để thể hiện mọi mẫu tự trong ngôn ngữ của các
nước trên thế giới, cụ thể như các mẫu tự Á, Ặ, Ô, Đ, … trong tiếng Việt, nên các font chữ trên bảng mã Unicode ngày càng trở nên phổ biến.
2.3.2.5 Lưu trữ số thực