Series bài giảng lớp luyện thi FE chuẩn kỹ sư CNTT Nhật Bản. Tổ giảng viên biên soạn giáo trình chia sẻ miễn phí. Nếu bạn sử dụng hãy ghi rõ nguồn từ Techmaster Việt nam.
Cần nhớ 👆
- String variable thường lưu ở stack
- String literal lưu ở heap
- String có nhiều phương thức để thao tác
- Ích lợi bảng mã ASCII là chuẩn hoá, giúp nội dung string, text có thể đọc, hiểu bởi các loại máy tính hệ điều hành khác nhau
- Ký tự được quy ước mã hoá dưới dạng số nguyên.
- Bảng mã ASCII căn bản 0-127 ký tự bảng chữ cái và dấu phổ biến.
- Bảng mã ASCII mở rộng 128-255 ký tự đặc biệt.
Khi phần mềm chạy, string literal được lưu ở vùng nhớ heap
String variable thường lưu vùng nhớ ngăn sếp (stack memory). Trong C++, biến con trỏ chuỗi sẽ lưu ở heap.
String literal lưu ở vùng nhớ heap. Java có vùng nhớ string constant pool để tái sử dụng chuỗi cho nhiều biến trỏ tới.
Bảng mã ASCII 7 bit và 8 bit
Một chuỗi gồm nhiều ký tự. Vậy một ký tự (character) được biểu diễn như thế nào?
Những năm 197x khi nước Mỹ có rất nhiều hãng máy tính chạy trên các hệ điều hành khác nhau, để cho dữ liệu string, text lưu trữ có thể đọc được bởi các máy tính, hệ điều hành khác nhau, uỷ ban tiêu chuẩn của Hoa Kỳ đưa bảng mã ASCII. Bảng mã ASCII (American Standard Code for Information Interchange) dùng để thống nhất mã quy đổi các các ký tự sang số nguyên (decimal code hoặc hex code). Như vậy ký tự sẽ lưu trữ dưới dạng byte.
Ví dụ ‘a’ = 97, ‘A’ = 65, ‘0’ = 48
Do bảng chữ cái Latin chỉ có 26 ký tự, thêm 26 ký tự Hoa, 10 chữ số, và một số ký tự đặc biệt (space, tab, <>, {}, ~`!@#$%^&*()_+=:;"<>,./?), nên chỉ cần số nguyên 7 bit (128 khả năng) là đủ biểu diễn.
Nếu dùng đủ 1 byte (8 bit - 256 khả năng), chúng ta có bảng ASCII căn bản và mở rộng. Bản mã ASCII mở rộng cho các ký tự đặc biệt.
Trích một phần bảng mã ASCII căn bản.
Letter | ASCII Code | Binary | Letter | ASCII Code | Binary |
---|---|---|---|---|---|
a | 097 | 01100001 | A | 065 | 01000001 |
b | 098 | 01100010 | B | 066 | 01000010 |
c | 099 | 01100011 | C | 067 | 01000011 |
d | 100 | 01100100 | D | 068 | 01000100 |
e | 101 | 01100101 | E | 069 | 01000101 |
f | 102 | 01100110 | F | 070 | 01000110 |
g | 103 | 01100111 | G | 071 | 01000111 |
h | 104 | 01101000 | H | 072 | 01001000 |
i | 105 | 01101001 | I | 073 | 01001001 |
j | 106 | 01101010 | J | 074 | 01001010 |
k | 107 | 01101011 | K | 075 | 01001011 |
l | 108 | 01101100 | L | 076 | 01001100 |
m | 109 | 01101101 | M | 077 | 01001101 |
n | 110 | 01101110 | N | 078 | 01001110 |
o | 111 | 01101111 | O | 079 | 01001111 |
p | 112 | 01110000 | P | 080 | 01010000 |
q | 113 | 01110001 | Q | 081 | 01010001 |
r | 114 | 01110010 | R | 082 | 01010010 |
s | 115 | 01110011 | S | 083 | 01010011 |
t | 116 | 01110100 | T | 084 | 01010100 |
u | 117 | 01110101 | U | 085 | 01010101 |
v | 118 | 01110110 | V | 086 | 01010110 |
w | 119 | 01110111 | W | 087 | 01010111 |
x | 120 | 01111000 | X | 088 | 01011000 |
y | 121 | 01111001 | Y | 089 | 01011001 |
z | 122 | 01111010 | Z | 090 | 01011010 |
Kiểu char trong ngôn ngữ lập trình
Kiểu char thể hiện 1 ký tự nó tương đương với kiểu nguyên dương 8 bit biểu diễn giá trị từ 0 đến 255. Đoạn code Java dưới sẽ in ra ký tự có mã từ 97 (a) đến 97 + 26 (z)
class Main {
public static void main(String[] args) {
for (char c = 97; c < 97 + 26; c++) {
System.out.println(c);
}
}
}
Những hệ mã hoá ký tự khác ASCII
ASCII chỉ đủ để mã hoá bảng ký tự Latin nhưng không đủ đã biểu diễn các bảng chữ cái các ngôn ngữ khác như: tiếng Hàn, Nhật, Trung Quốc, Việt nam… Bản mã Unicode sinh ra với vùng lưu trữ lớn hơn 2 bytes hoặc 4 bytes đủ để thể hiện tất cả các ký tự của bất kỳ ngôn ngữ nào. Nhược điểm của Unicode là tốn thêm dung lượng lưu trữ.
Bình luận