Hầu hết các ngôn ngữ lập trình, bao gồm cả C, C++, Java, và Python đều cung cấp kiểu dữ liệu boolean, có thể mang giá trị True (đúng) hoặc False.

Chúng ta cùng xét các đoạn chương trình ví dụ sau đây, chúng đều sử dụng toán tử Logical Not (phủ định logic) trên các giá trị boolean, cú pháp của toán tử này là dấu !


# A Python program that uses Logical Not or ! on boolean 
a = not True
b = not False
print a 
print b 
# Output: False 
#         True 

Kết quả đầu ra của các đoạn chương trình trên đều giống như mong đợi, nhưng kết quả của các ví dụ bên dưới đây có thể sẽ không như mong đợi nếu chúng ta chưa từng sử dụng toán tử Bitwise Not (phủ định chuỗi bits) trước đó (cú pháp của toán tử này là dấu ~).


# A Python program that uses Bitwise Not or ~ on boolean 
a = True
b = False
print ~a 
print ~b 
-2
-1

Lý do: Toán tử phủ định bit ~ sẽ trả về “số phần bù với 1” của một số.

- Ví dụ 1:
a = 10 = 1010 (Hệ nhị phân)
~a = ~1010
   = -(1010 + 1)
   = -(1011)
   = -11 (Hệ thập phân)
- Ví dụ 2:
b = 1 = 01 (Hệ nhị phân) (thật ra nó là 00000001, nhưng viết là 01 cho gọn)
~b = ~01
    = -(01 + 1)
    = -(10)
    = -2 (Hệ thập phân)
- Ví dụ 3:
c = 0 = 0 (Hệ nhị phân) (thật ra nó là 00000000, nhưng viết là 0 cho gọn)
~c = ~0
    = -(0 + 1)
   = -(1)
   = -1

Từ ví dụ 2ví dụ 3, ta đã hiểu được vì sao mà a = True sau đó print ~a mà kết quả lại là -2, và vì sao mà b = False sau đó print ~b lại được kết quả -1

Java không cho phép áp dụng toán tử ~ trên các giá trị boolean. Ví dụ, đoạn code sau đây sẽ gây lỗi trình biên dịch

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

// A Java program that uses Bitwise Not or ~ on boolean 
import java.io.*; 
  
class GFG 
{ 
    public static void main (String[] args) 
    { 
        boolean a = true, b = false; 
        System.out.println(~a); 
        System.out.println(~b); 
    } 
} 

Kết quả

6: error: bad operand type boolean for unary operator '~'
        System.out.println(~a);
                           ^
7: error: bad operand type boolean for unary operator '~'
        System.out.println(~b);
                           ^
2 errors

Kết luận

“Toán tử phủ định logic, hay ký hiệu là !” được sử dụng cho các giá trị boolean, còn “Toán tử phủ định chuỗi bit, hay ký hiệu là ~” được áp dụng cho các giá trị số nguyên (integers). Các ngôn ngữ lập trình như C/C++ và Python sẽ tự động coi giá trị boolean thành giá trị integer khi một toán tử dành cho kiểu integer được áp dụng. Nhưng Java không cho phép điều đó.

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

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