[Basic] Biến và kiểu dữ liệu

Các kiểu dữ liệu cơ bản trong C++

Loại dữ liệuKiểu dữ liệuKích thước (byte)Miền giá trị
Booleanbool1true / false
Ký tựchar1-128 ..... 127
unsigned char10 ..... 255
wchar_t2-32768 ..... 32767
Số nguyênshort2-32768 ..... 32767
unsigned short20 ..... 65535
int4-2^31 ..... (2^31) – 1
unsigned int40 ..... (2 ^ 32) - 1
long4-2^31 ..... (2^31) – 1
unsigned long40 ..... (2 ^ 32) - 1
long long8-2^63 ..... (2^63) - 1
Số thựcfloat4±1.18 x 10^-38 ..... ±3.4 x 10^38
double8±2.23 x 10^-308 … ±1.80 x 10^308
long double8±2.23 x 10^-308 … ±1.80 x 10^308

Chú ý:

  • Nên chọn kiểu dữ liệu phù hợp với mục đích của biến khai báo
  • Không sử dụng giá trị vượt quá miền giá trị cho phép của kiểu dữ liệu

Ví dụ:

char val  = 250; // biến val = 250 vượt quá miền giá trị kiểu char (-128....127)

Sẽ có vấn đề gì nếu 1 biến có giá trị vượt quá miền giá trị của kiểu dữ liệu khai báo biến đó

=> Biến val sẽ có giá trị bao nhiêu ?

Định nghĩa biến trong C++

type valName; // type là kiểu dữ liệu , valName tên biến

Chú ý :

  • Đặt tên biến phải tuân theo quy tắc đặt tên của C++
  • Nên đặt tên theo chuẩn nào đó để cho code rõ ràng, dễ đọc

=> Có thể xem quy tắc và quy ước đặt tên tại : Khái niệm đầu tiên (P1)

Định nghĩa nhiều biến trên 1 dòng, các biến ngăn cách nhau bằng dấu phẩy

int a, b = 10; //Định nghĩa biến a chưa khởi tạo, biến b khởi tạo giá trị = 10

Khởi tạo giá trị cho biến.

Khi khai báo biến ta có thể cho biến 1 giá trị ban đầu gọi là khởi tạo (initialization)

C++ hỗ trợ 3 cách khởi tạo giá trị ban đầu cho biến:

  • Copy initialization
int val = 10; // Copy initialization
  • Direct initialization
int val(10); //direct initialization
  • Uniform initialization (C++11)
int val{10}; // Uniform initialization

Chú ý : 

  • Luôn luôn khởi tạo giá trị cho biến , hoặc gán giá trị cho biến ngay sau định nghĩa.

Gán giá trị cho biến (Variable assignment)

int val;

val = 5; //set giá trị cho biến sau khi định nghĩa là gán (assignment)

 

Kiểu ký tự (char)

  • Char là kiểu dữ liệu giống như là 1 số nguyên.
  • Char làm việc khác 1 số nguyên bình thường.
  • Giá trị của char được hiểu như 1 ký tự ASCII
  • Có 2 set giá trị cho biến char
char val(97);

char val('a'); //Mã ASCII a (97)

In biến kiểu char ra màn hình mặc định biến kiểu char in ra màn hình theo ký tự ASCII

char val = 97;

cout<<val<<endl; //In ra ký tự a

=> Muốn biến kiểu char in ra số nguyên phải ép kiểu sang kiểu int (static_cast<new_type>(expression))

cout << static_cast<int>(val) << endl; // in ra số 97

Ký tự đặc biệt trong C++

  • Trong C++ có 1 số ký tự có ý nghĩa đặc biệt.
  • Để sử dụng những ký tự đặc biệt này bắt đầu với ‘\’
\a Tạo 1 báo thức, kêu 1 tiếng beep
\n Xuống dòng
\r Đưa con trỏ chuột về đầu dòng
\t In tab theo chiều ngang
\v In tab theo chiều dọc
\' In dấu nháy đơn
\" In dấu nháy kép
\\ In dấu \
\(number) Convert number (hệ 8 - octal) sang char
\x(number) Convert number (hệ 16 - hex) sang char

 Literals

  • Literals là giá trị được sử dụng trực tiếp trong code.
  • Ta không thể thay đổi giá trị literals
int val = 10; // 10 là integer literals

cont char* ptr = "Hello World"; // "Hello World" là string literals

Một số là literals ta có thể thêm hậu tố để xác định kiểu dữ liệu

Kiểu dữ liệuHậu tốÝ nghĩa
intu hoặc Uusigned int
intl hoặc Llong
intul hoặc ULunsigned long
intll hoặc LLlong long
doublef hoặc Ffloat
doublel hoặc Llong double

float fValue = 5.0f; // 5.0 có kiểu là float

double d = 6.0; // 6.0 có kiểu là double (default)

Octal and hex literals

Để sử dụng octal literals ta thêm tiền tố 0 vào trước number literals

#include <iostream>

int main()
{
 int x = 012; // 0 đằng trước nghĩa là 12 theo hệ 8(octal) = 10 (hệ 10); x có giá trị 10

 std::cout << x;

 return 0;
}

Để sử dụng hex literals ta thêm tiền tố 0x vào trước number literals

#include <iostream>

int main()
{
 int x = 0xF; // 0x đằng trước nghĩa là F theo hệ 16 (hex) = 15 (Hệ 10); x có giá trị 15

 std::cout << x;

 return 0;
}

Hằng trong C++

Định nghĩa hằng

const type const_name = value; // type kiểu dữ liệu, const_name tên của hằng
type const const_name = value;
const float PI = 3.14; // Giá trị hằng được xác định lúc compile

Chú ý:

  • Hằng luôn phải khởi tạo giá trị lúc khai báo.
  • Không thể thay đổi giá trị của hằng.

Giá trị của hằng có thể được xác định lúc compile hoặc runtime.

std::cout << "Enter your age: ";

int age;

std::cin >> age;

const int myAge = age; //OK, giá trị hằng myAge được xác định lúc run time khi sau khi nhập biến age

Trong C++ 11 giới thiệu từ khóa constexpr, giá trị hằng chỉ được phép xác định lúc compile

constexpr float PI = 3.14f; //OK giá trị hằng xác định lúc compile

std::cout << "Enter your age: ";

int age;

std::cin >> age;

constexpr int myAge = age; //ERROR, giá trị hằng myAge được xác định lúc run time khi sau khi nhập biến age

 

Was this article helpful?

Có 2 bình luận

  1. Dee

    ở phần 4. Kiểu ký tự (char) có nhắc đến việc ép kiểu, anh cho em hỏi 2 cái này có tương đương nhau không?
    – static_cast(val)
    – (int) val
    cảm ơn!

    1. Chức năng giống nhau nhé bạn, static_cast là type trong C++, còn (int) val là theo cú pháp của C. Trong C ++ dùng được cả 2 kiểu nhé

Leave A Comment?