Các kiểu dữ liệu trong C++

Có 4 kiểu dữ liệu cơ bản trong C++ là: char, int, float, double.

kieu-du-lieu-yeulaptrinh.pw

TT Kiểu dữ liệu Kích thước              Miền giá trị
(Type) (Length) (Range)
1 unsigned char 1 byte 0 đến 255
2 char 1 byte – 128 đến 127
3 enum 2 bytes – 32,768 đến 32,767
4 unsigned int 2 bytes 0 đến 65,535
5 short int 2 bytes – 32,768 đến 32,767
6 int 2 bytes – 32,768 đến 32,767
7 unsigned long 4 bytes 0 đến 4,294,967,295
8 long 4 bytes – 2,147,483,648 đến 2,147,483,647
9 float 4 bytes 3.4 * 10–38
đến 3.4 * 1038
10 double 8 bytes 1.7 * 10–308
đến 1.7 * 10308
11 long double 10 bytes 3.4 * 10–4932
đến 1.1 * 104932
Những bài viết có thể bạn thích:

Khái niệm về kiểu dữ liệu

Thông thường dữ liệu hay dùng là số và chữ. Tuy nhiên việc phân chia chỉ 2 loai dữ liệu là không đủ. Để dễ dàng hơn cho lập trình, hầu hết các NNLT đều phân chia dữ liệu thành nhiều kiểu khác nhau được gọi là các kiểu cơ bản hay chuẩn. Trên cơ sở kết hợp các kiểu dữ liệu chuẩn, NSD có thể tự đặt ra các kiểu dữ liệu mới để phục vụ cho chương trình giải quyết bài toán của mình. Có nghĩa lúc đó mỗi đối tượng được quản lý trong chương trình sẽ là một tập hợp nhiều thông tin hơn và được tạo thành từ nhiều loại (kiểu) dữ liệu khác nhau. Dưới đây chúng ta sẽ xét đến một số kiểu dữ liệu chuẩn được qui định sẵn bởi C++.

Một biến như  đã biết là một số ô nhớ liên tiếp nào đó trong bộ nhớ dùng để lưu  trữ dữ liệu (vào, ra hay kết quả trung gian) trong quá trình hoạt động của chương trình. Để quản lý chặt chẽ các biến, NSD cần khai báo cho chương trình biết trước tên biến  và kiểu của dữ liệu được chứa trong biến. Việc khai báo này sẽ làm chương trình quản lý các biến dễ dàng hơn như trong việc phân bố bộ nhớ cũng như quản lý các tính toán trên biến theo nguyên tắc: chỉ có các dữ liệu cùng kiểu với nhau mới được phép làm toán với nhau. Do đó, khi đề cập đến một kiểu chuẩn của một NNLT, thông thường chúng ta sẽ xét đến các yếu tố sau:

  • tên kiểu: là một từ dành riêng để chỉ định kiểu của dữ liệu.
  • số byte trong bộ nhớ để lưu trữ một đơn vị dữ liệu thuộc kiểu này: Thông thường số byte này phụ thuộc vào các trình biên dịch và hệ thống máy khác nhau, ở đây ta chỉ xét đến hệ thống máy PC thông dụng hiện
  • Miền giá trị của kiểu: Cho biết một đơn vị dữ liệu thuộc kiểu này sẽ có thể lấy giá trị trong miền nào, ví dụ nhỏ nhất và lớn nhất là bao nhiêu. Hiển nhiên các giá trị này phụ thuộc vào số byte mà hệ thống máy qui định cho từng kiểu. NSD cần nhớ đến miền giá trị này để khai báo kiểu cho các biến cần sử dụng một cách thích hợp.

Dưới đây là bảng tóm tắt một số kiểu chuẩn đơn giản và các thông số của nó được sử dụng trong C++.

Loại dữ liệu Tên kiểu Số ô nhớ Miền giá trị
Kí tự char 1 byte – 128 .. 127
unsigned char 1 byte 0 .. 255
Số nguyên int 2 byte – 32768 .. 32767
unsigned int 2 byte 0 .. 65535
short long 2 byte

4 byte

– 32768 .. 32767

– 215 .. 215  – 1

Số thực float 4 byte ± 10 -37  . . ± 10 +38
double 8 byte ± 10 -307  . . ± 10 +308

Bảng 1. Các loại kiểu đơn giản

Trong chương này chúng ta chỉ xét các loại kiểu đơn giản trên đây. Các loại kiểu có cấu trúc do người dùng định nghĩa sẽ được trình bày trong các chương sau.

Kiểu ký tự

Một kí tự là một kí hiệu trong bảng mã ASCII. Như đã biết một số kí tự có mặt chữ trên bàn phím (ví dụ các chữ cái, chữ số) trong khi một số kí tự lại không (ví dụ kí tự biểu diễn việc lùi lại một ô trong văn bản, kí tự chỉ việc kết thúc một dòng hay kết thúc một văn bản). Do vậy để biểu diễn một kí tự người ta dùng chính mã ASCII của kí tự đó trong bảng mã ASCII và thường gọi là giá trị của kí tự. Ví dụ phát biểu “Cho kí  tự ‘A'” là cũng tương đương với phát biểu “Cho kí tự 65” (65 là mã ASCII của kí tự ‘A’), hoặc “Xoá kí tự xuống dòng” là cũng tương đương với phát biểu “Xoá kí tự 13” vì 13 là mã ASCII của kí tự xuống dòng.

Như vậy một biến kiểu kí tự có thể được nhận giá trị theo 2 cách tương đương – chữ hoặc giá trị số: ví dụ giả sử c là một biến kí tự thì câu lệnh gán c = ‘A’ cũng tương đương với câu lệnh gán c = 65. Tuy nhiên để sử dụng giá trị số của một kí tự c nào đó  ta phải yêu cầu đổi c sang giá trị số bằng câu lệnh int(c).

Theo bảng trên ta thấy có  2 loại kí tự là char với miền giá trị từ -128 đến   127 và unsigned char (kí tự không dấu) với miền giá trị từ 0 đến 255. Trường hợp một biến được gán giá trị vượt ra ngoài miền giá trị của kiểu thì giá trị của biến sẽ được tính theo mã bù – (256 – c). Ví dụ nếu gán cho char c giá trị 179 (vượt khỏi miền giá trị đã được qui định của char) thì giá trị thực sự được lưu trong máy sẽ là – (256 – 179) = -77.

Ví dụ 1 :

char c, d ;                                       // c, d được phép gán giá trị từ -128 đến 127

unsigned e ;                                   // e được phép gán giá trị từ 0 đến 255

c = 65 ; d = 179 ;                           // d có giá trị ngoài miền cho phép

e = 179; f = 330 ;                           // f có giá trị ngoài miền cho phép

cout << c << int(c) ;                                        // in ra chữ cái ‘A’ và giá trị số 65

cout << d << int(d) ;                                        // in ra là kí tự ‘|’ và giá trị số -77

cout << e << int(e)                                          // in ra là kí tự ‘|’ và giá trị số 179

cout << f << int(f)                          // in ra là kí tự ‘J’ và giá trị số 74

Chú ý: Qua ví dụ trên ta thấy một biến nếu được gán giá trị ngoài miền cho phép sẽ dẫn đến kết quả không theo suy nghĩ thông thường. Do vậy nên tuân thủ qui tắc chỉ gán giá trị cho biến thuộc miền giá trị mà kiểu của biến đó qui định. Ví dụ nếu muốn sử dụng biến có giá trị từ 128 .. 255 ta nên khai báo biến dưới dạng kí tự không dấu (unsigned char), còn nếu giá trị vượt quá 255 ta nên chuyển sang kiểu nguyên (int) chẳng hạn.

Kiểu số nguyên

Các số nguyên được phân chia thành 4 loại kiểu khác nhau với các miền giá trị tương ứng được cho trong bảng 1. Đó là kiểu số nguyên ngắn (short) tương đương với kiểu số nguyên (int) sử dụng 2 byte và số nguyên dài (long int) sử dụng 4 byte. Kiểu số nguyên thường được chia làm 2 loại có dấu (int) và không dấu (unsigned int hoặc có thể viết gọn hơn là unsigned). Qui tắc mã bù cũng được áp dụng nếu giá trị của biến vượt ra ngoài miền giá trị cho phép, vì vậy cần cân nhắc khi khai báo kiểu cho các  biến. Ta thường sử dụng kiểu int cho các số nguyên trong các bài toán với miền giá trị vừa phải (có giá trị tuyệt đối bé hơn 32767), chẳng hạn các biến đếm trong các vòng lặp, …

Kiểu số thực

Để sử dụng số thực ta cần khai báo kiểu float hoặc double mà miền giá trị của chúng được cho trong bảng 1. Các giá trị số kiểu double được gọi là số thực với độ chính xác gấp đôi vì với kiểu dữ liệu này máy tính có cách biểu diễn khác so với kiểu float để đảm bảo số số lẻ sau một số thực có thể tăng lên đảm bảo tính chính xác cao hơn so với số kiểu float. Tuy nhiên, trong các bài toán thông dụng thường ngày độ chính xác của số kiểu float là đủ dùng.

Như đã nhắc đến trong phần các lệnh vào/ra ở chương 1, liên quan đến việc in ấn số thực ta có một vài cách thiết đặt dạng in theo ý muốn, ví dụ độ rộng tối thiểu để in một số hay số số lẻ thập phân cần in …

Ví dụ 2 : Chương trình sau đây sẽ in diện tích và chu vi của một hình tròn có bán kính 2cm với 3 số lẻ.

#include <iostream.h>

#include <iomanip.h> void main()

{

float r = 2 ;                            // r là tên biến dùng để chứa bán kính

cout << “Diện tích = ” << setiosflags(ios::showpoint) ;

cout << setprecision(3) << r * r * 3.1416 ; getch() ;

}

 

Khuyên dùng

 

About Aida Nana

Nghề chính là chém gió, quăng bom và ném lựu đạn.
Nghề phụ là cắt cỏ, chém chuối, cưa cây……

Speak Your Mind

*