Các Ngôn Ngữ Lập Trình đều có một hệ thống các kiểu dữ liệu cơ sở cùng với các phép toán để người lập trình có thể thực hiện các tính toán và dựa vào kiểu cơ sở để xây dựng những kiểu dữ liệu phức tạp hơn trong quá trình viết chương trình.
Xem thêm Phương pháp học tập hiệu quả học phần ngôn ngữ lập…
Các kiểu dữ liệu bao gồm kiểu số nguyên (có dấu và không dấu), kiểu số thực, kiểu luận lý và kiểu ký tự, Kiểu void.
Độ lớn của từng kiểu dữ liệu phụ thuộc vào nền tảng lập trình, Để nắm rõ vấn đề này chúng ta cùng xem xét:
- Khi chương trình chạy, mỗi biến hay hằng của chương trình sẽ được kết buộc với một ô nhớ bên trong bộ nhớ của máy tính.
- Tùy theo kiểu dữ liệu, kích thước (hay độ dài) của ô nhớ này (cũng được gọi là kích thước của biến hay hằng tương ứng) sẽ chiếm một số byte nhất định trong bộ nhớ.
- Toán tử sizeof dùng để xác định kích thước của kiểu dữ liệu, biến hay hằng trong C/C++
Để biết chính xác độ lớn của kiểu dữ liệu trên nền hiện tại có thể sử dụng từ khóa sizeof.
Cú pháp: sizeof(kiểu dữ liệu)
Ví dụ (chương trình C)
#include <stdio.h> void main() { short Delta=9; printf("Kich thuoc bien Delta = %d\n", sizeof(Delta)); printf("Kich thuoc kieu int = %d\n", sizeof(int)); printf("Kich thuoc kieu long = %d\n", sizeof(long)); printf("Kich thuoc kieu float = %d\n", sizeof(float)); printf("Kich thuoc kieu double = %d\n", sizeof(double)); printf("Kich thuoc kieu char = %d\n", sizeof(char)); }
Ví dụ (chương trình C++)
#include <iostream> using namespace std; void main() { short Delta=9; cout << "Kich thuoc bien Delta = " << sizeof(Delta) << endl; cout << "Kich thuoc kieu int = " << sizeof(int) << endl; cout << "Kich thuoc kieu long = " << sizeof(long) << endl; cout << "Kich thuoc kieu float = " << sizeof(float) << endl; cout << "Kich thuoc kieu double = " << sizeof(double) << endl; cout << "Kich thuoc kieu char = " << sizeof(char) << endl; }
Kiểu số nguyên có dấu
- Miền giá trị (số n-bit): -2n-1 .. +2n-1 – 1
Kiểu số nguyên không dấu
- Miền giá trị (số n-bit): 0 .. 2n – 1
- Hằng số nguyên có thể biểu diễn ở 3 dạng
- Bát phân: viết bắt đầu bằng số 0
- Thập phân: viết bắt đầu bằng số từ 1 đến 9
- Thập lục phân: viết đầu bằng 0x
- Các phép toán số học
- Phép cộng: +, phép trừ: –, phép nhân: *
- Phép chia lấy phần nguyên: /
- Phép chia lấy phần dư: %
- Các phép toán trên bit cho số nguyên không dấu (được áp dụng khi muốn lập trình thao tác trên các bit của dữ liệu hay muốn tăng tốc độ xử lý của chương trình trong một vài tình huống nhất định)
- Phép and bit: &
- Phép or bit: |
- Phép xor bit: ^
- Phép not bit: ~
Ví dụ toán tử trên bit
#include <stdio.h> void main() { unsigned char a = 45; // 00101101 unsigned char b = 58; // 00111010 int c1, c2, c3, c4, c5, c6; c1 = a & b; // 00101000 c2 = a | b; // 00111111 c3 = a ^ b; // 00010111 c4 = ~a; // 11010010 c5 = a >> 4; // 11010000 c6 = a << 4; // 00000010 }
Kiểu số thực
Cấu trúc lưu trữ bên trong của số thực được thiết kế theo chuẩn số chấm động (floating-point) của IEEE.
- Các phép toán số học
Phép trừ: –
Phép nhân: *
Phép chia: /
- Các hàm toán học như căn số, lũy thừa, logarit, …
Kiểu ký tự
- Kiểu ký tự 8-bit
–Kiểu char hoặc unsigned char.
–Lưu mã ASCII của ký tự, giá trị từ 0 đến 255.
–Một số ký tự nên nhớ
-
Đổi ký tự từ ký tự thường sang ký tự hoa:
- Nếu ‘a’ ≤ ch ≤ ’z’ thì ch (mới) = ch – (‘a’ – ‘A’)
- Ngược lại ch (mới) = ch
-
Trong mọi trường hợp ta có công thức:
-
Tương tự ta cũng có công thức chuyển ký tự thành ký tự thường:
-
Ví dụ:
#include <stdio.h> void main() { char ch; ch=65; printf("ch = %c\n", ch); ch = 'A'; printf("ch = %c\n", ch); printf("ch = "); scanf("%c", &ch); printf("ASCII code = %d\n", ch); ch -= ('a' – 'A')*(ch>='a' && ch<=z); printf("Upper case: %c\n", ch); }
- Kiểu ký tự 16-bit
–Kiểu wchar_t (#include <wchar>)
–Lưu trữ dựa trên bảng mã quốc tế UTF-16 (một dạng mã Unicode) Mã UTF-16 của ký tự thông thường (‘0’ đến ‘9’, ‘A’ đến ‘Z’, ‘a’ đến ‘z’, …) trùng mã ASCII.
–Hằng ký tự kiểu wchar_t được đặt trước bằng chữ L
Lưu ý, ‘B’ và L’B’ như nhau (cùng giá trị 66) nhưng kích thước trong bộ nhớ khác nhau
(sizeof(‘B’) = 1, sizeof(L’B’) = 2)
Ví dụ: Viết chương trình nhập vào 1 kí tự bất kỳ. Xuất ra mã ASCII của ký tự đó. Nếu ký tự là chữ hoa thì biến thành chữ thường và ngược lại.
#include<stdio.h> #include<conio.h> void main() { printf("Nhap ky tu: "); char c; scanf("%c", &c); printf("Ma ASCII cua %c la %d\n", c, c); char hoa = (c >= 97 && c <= 122)?(c-32):(c+32; printf("Hoa/thuong: %c", hoa); getch(); }
Kiểu luận lý
- Trong C chuẩn không có kiểu luận lý. Giá trị sai (false) là 0, giá trị đúng (true) là khác 0 (thường là 1).
- Khai báo kiểu bool đối với C++ chuẩn hoặc kiểu số nguyên bất kỳ (char, int, …)
- Giá trị khác 0 nghĩa là đúng (true).
- Giá trị bằng 0 nghĩa là sai (false).
Lưu ý: Kết quả lượng giá một biểu thức luận lý bất kỳ thực hiện bởi C++ luôn cho kết quả là 0 (false) hay 1 (true).
- Các phép toán
- Kết hợp: && (and), || (or), ! (not)
- So sánh: >, >=, <, <=, ==, !=
Kiểu void
- Không lưu bất cứ dữ liệu gì
- Báo cho trình biên dịch không có giá trị trả về
Xem thêm Biến-Hằng-Câu lệnh và biểu thức trong C/C++