Trong thực thế, những loại câu chỉ có hai kết quả có thể xảy ra là: có / đúng hoặc không / sai thì rất là phổ biến, đến nỗi nhiều ngôn ngữ lập trình dành riêng một kiểu dữ liệu đặc biệt để xử lý chúng. Kiểu đó đó được gọi là kiểu Boolean (lưu ý: Boolean được viết hoa đúng trong ngôn ngữ tiếng Anh bởi vì nó được đặt tên theo nhà phát minh của nó, George Boole).

1. Biến Boolean

Biến Boolean là các biến chỉ có thể có hai giá trị là: true và false.

Để khai báo một biến Boolean, chúng ta sử dụng từ khóa bool.

bool b;

Để khởi tạo hoặc gán giá trị đúng hoặc sai cho biến Boolean, chúng ta sử dụng từ khóa true và false.

bool b1 { true };
bool b2 { false };
b1 = false;
bool b3 {}; // default initialize to false

Giống như toán tử trừ đơn nguyên, (-) có thể được sử dụng để tạo ra một số nguyên âm, toán tử NOT logic (!) Có thể được sử dụng để đảo ngược giá trị Boolean từ true sang false hoặc false thành true:

bool b1 { !true }; // b1 will be initialized with the value false
bool b2 { !false }; // b2 will be initialized with the value true

Các giá trị Boolean không thực sự được lưu trữ trong các biến Boolean ở dạng true hay false mà chúng được lưu trữ dưới dạng số nguyên: true trở thành số nguyên 1 và false trở thành số nguyên 0. Tương tự, khi các giá trị Boolean được xử lý, họ xử lý các số nguyên 0 (sai) hoặc 1 (đúng). Bởi vì Booleans thực sự được lưu trữ dưới dạng các số nguyên.

2. In các biến Boolean

Khi chúng ta in các giá trị Boolean bằng std :: cout, std :: cout in 0 là sai và 1 là đúng:

#include <iostream>
 
int main()
{
    std::cout << true << std::endl; // true evaluates to 1
    std::cout << !true << std::endl; // !true evaluates to 0
 
    bool b{false};
    std::cout << b << std::endl; // b is false, which evaluates to 0
    std::cout << !b << std::endl; // !b is true, which evaluates to 1
    return 0;
}

Đầu ra:

1
0
0
1

Nếu bạn muốn std :: cout in ra true hoặc false thay vì 0 hoặc 1, bạn có thể sử dụng std :: boolalpha. Dưới đây là một ví dụ:

#include <iostream>
 
int main()
{
    std::cout << true << std::endl;
    std::cout << false << std::endl;
 
    std::cout << std::boolalpha; // print bools as true or false
 
    std::cout << true << std::endl;
    std::cout << false << std::endl;
    return 0;
}

Bản in này như sau:

1
0
true
false

3. Chuyển số nguyên thành Boolean

Bạn có thể khởi tạo Boolean bằng một số nguyên bằng cách sử dụng khởi tạo:

#include <iostream>
 
int main()
{
	bool b{ 4 }; // error: narrowing conversions disallowed
	std::cout << b;
	
	return 0;
}

Tuy nhiên, chúng ta có thể chuyển đổi một số nguyên thành Boolean, số nguyên 0 được chuyển đổi thành false và bất kỳ số nguyên nào khác được chuyển đổi thành true.

#include <iostream>
 
int main()
{
	std::cout << std::boolalpha; // print bools as true or false
 
	bool b1 = 4 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b1 << '\n';
 
	bool b2 = 0 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b2 << '\n';
 
	
	return 0;
}

Bản in này:

true
false

4. Nhập(Input) giá trị Boolean

Nhập các giá trị Boolean bằng std :: cin đôi khi khiến các lập trình viên mới gặp khó khăn.

Hãy xem xét chương trình sau:

int main()
{
	bool b {}; // default initialize to false (0)
	std::cout << "Enter a boolean value: ";
	std::cin >> b;
        std::cout << "You entered: " << b;
 
	return 0;
}
Enter a Boolean value: true
You entered: 0

Hóa ra std :: cin chỉ chấp nhận hai đầu vào cho các biến Boolean là: 0 và 1 (không đúng hoặc sai). Bất kỳ đầu vào nào khác sẽ khiến std :: cin bị sai. Trong trường hợp này, vì chúng ta đã nhập đúng nên std :: cin bị sai. Trong C ++ 11 hoặc mới hơn, giá trị này cũng đặt b thành 0 (là giá trị tương tự mà nó đã được khởi tạo). Do đó, khi std :: cout in một giá trị cho b thì nó đã in 0.

5. Giá trị trả về Boolean

Các giá trị Boolean thường được sử dụng làm giá trị trả về cho các hàm kiểm tra xem điều gì đó có đúng hay không. Các hàm như vậy thường được đặt tên bắt đầu bằng từ is (ví dụ: isEqual) hoặc có (ví dụ: hasCommonDivisor).

Hãy xem xét ví dụ sau, khá giống với ví dụ trên:

#include <iostream>
 
// returns true if x and y are equal, false otherwise
bool isEqual(int x, int y)
{
    return (x == y); // operator== returns true if x equals y, and false otherwise
}
 
int main()
{
    std::cout << "Enter an integer: ";
    int x{ 0 };
    std::cin >> x;
 
    std::cout << "Enter another integer: ";
    int y{ 0 };
    std::cin >> y;
 
    std::cout << std::boolalpha; // print bools as true or false
    
    std::cout << x << " and " << y << " are equal? ";
    std::cout << isEqual(x, y); // will return true or false
 
    return 0;
}

Đây là đầu ra của hai lần chạy chương trình này:

Enter an integer: 5
Enter another integer: 5
5 and 5 are equal? true

Enter an integer: 6
Enter another integer: 4
6 and 4 are equal? false

Cái này hoạt động ra sao? Đầu tiên chúng ta nhập các giá trị nguyên cho x và y. Tiếp theo, biểu thức là isEqual (x, y). Trong lần chạy đầu tiên, điều này dẫn đến một lệnh gọi hàm isEqual (5, 5). Bên trong hàm đó, 5 == 5 được ước tính, tạo ra giá trị đúng. Giá trị true được trả về cho người gọi sẽ được in bởi std :: cout. Trong lần chạy thứ hai, lệnh gọi isEqual (6, 4) trả về giá trị false.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!

1 BÌNH LUẬN

Bình luận bị đóng.