STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Các Thao Tác trên Bit

    Tìm hiểu về các phép tính trên bit - bitwise operator, ví dụ lập trình với bitwise operator bằng code C/C++.
    09/10/2015
    21/09/2020
    3 phút đọc
    Các Thao Tác trên Bit

    Bản chất máy tính chỉ hiểu được mã nhị phân dưới dạng dãy số 0 và 1. Mỗi con số như vậy được gọi là một bit. Ngôn ngữ lập trình có cung cấp cho chúng ta những toán tử để chúng ta có thể thao tác trên bit như các phép cơ bản and, or, not, xor, dịch trái, dịch phải. Trong bài viết này tôi sẽ cùng các bạn làm quen cũng như thực hành với những toán tử thao tác trên bit hay còn được gọi là bitwise.

    Các toán thử thao tác trên bit (bitwise)

    Dữ liệu lưu trữ trong máy tính dưới dạng nhị phân 0 1, ví dụ:

    unsigned char a = 12;

    Thì lưu trữ dưới bộ nhớ là: 0000 1100

    Tương tự

    unsigned int b = 95;

    Lưu trữ b dưới bộ nhớ là: 0000 0000 0000 0000 0000 0000 0101 1111

    Không gian lưu trữ kiểu unsigned int lớn hơn unsigned char do unsigned int dùng 32 bits để biểu diễn còn unsigned char dùng 8 bits để biểu diễn.

    Các toán tử thao tác trên bit

    Phép thao tác trên bit Kí hiệu
    Phép AND  &
    Phép OR  |
    Phép phủ định NOT ~
    Phép XOR  ^
    Phép dịch trái - Shift left <<
    Phép dịch phải - Shift right >>

    Phép AND

    Kí hiệu: &

    Bảng chân trị

    A B A & B
    0 0 0
    0 1 0
    1 0 0
    1 1 1

    Phép AND chỉ có giá trị 1 nếu cả hai toán hạng đều có giá trị 1.

    Ví dụ:

    A            0000 1100
    B            0101 0101
    C = A & B    0000 0100

    Phép OR

    Kí hiệu: |

    Bảng chân trị

    A B A | B
    0 0 0
    0 1 1
    1 0 1
    1 1 1

    Phép OR chỉ có giá trị 0 nếu cả hai toán hạng đều có giá trị 0.

    Ví dụ

    A            0000 1100
    B            0101 0101
    C = A | B    0101 1101

    Phép phủ định NOT

    Kí hiệu: ~

    Bảng chân trị

    A ~A
    0 1
    1 0

    Phép NOT đảo bit 1 thành 0 và ngược lại.

    Ví dụ

    A         0000 1100
    B = ~A    1111 0011

    Phép XOR

    Kí hiệu: ^

    Bảng chân trị

    A B A ^ B
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    Phép XOR chỉ có giá trị 0 nếu cả hai toán hạng có cùng giá trị, cùng là giá trị 1, hay cùng là giá trị 0.

    Ví dụ

    A            0000 1100
    B            0101 0101
    C = A ^ B    0101 1001

    Phép dịch trái <<

    Kí hiệu: <<

    Phép dịch trái n bit tương đương với phép nhân cho 2n.

    Ví dụ

    A             0000 1100
                       <—
    B = A << 2    0011 0000

    Phép dịch phải >>

    Kí hiệu: >> 

    Phép dịch phải n bit tương đương với phép chia cho 2n.

    Ví dụ

    A             0000 1100
                       —>
    B = A >> 2    0000 0011

    Các ví dụ thao tác cơ bản trên bit

    AND

    unsigned char a = 5;           // 00000101(5)
    unsigned char b = 6;           // 00000110(6)
    unsigned char c = a & b;       // 00000100(4)

    OR

    unsigned char a = 5;           // 00000101(5)
    unsigned char b = 6;           // 00000110(6)
    unsigned char c = a | b;       // 00000111(7)

    NOT

    unsigned char a = 5;  // 00000101(5)
    unsigned char b = ~a; // 11111010(250)

    XOR

    unsigned char a = 5;  // 00000101(5)
    unsigned char b = 6;  // 00000110(6)
    int c = a ^ b;        // 00000011(3)

    Dịch trái <<

    unsigned char a = 5;      // 00000101(5)
    unsigned char b = a << 4; // 01010000(80)

    Dịch phải >>

    unsigned char a = 5;      // 00000101(5)
    unsigned char b = a >> 1; // 00000010(2)
    
    0
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích.. Tìm hiểu thêm.

    Đề xuất

    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản
    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, ...
    Thao Tác trên Mảng 1 Chiều
    Hướng dẫn các thao tác trên mảng một chiều trong C/C++.
    26/04/2015

    Khám phá

    Các Thao Tác Cơ Bản Quản Lý Project Với Git
    Giới thiệu khái niệm và ưu điểm của Git. Hướng dẫn cài đặt và các thao ...
    05/08/2015
    EmguCV - OpenCV cho .NET - Một Số Thao Tác Xử Lý Ảnh Cơ Bản - I
    Hướng dẫn các thao tác xử lý ảnh cơ bản với thư viện EmguCV bao gồm: ...
    Ruler - Công Cụ Đo Khoảng Cách Trên Windows
    Đối với ngành công nghiệp phần mềm, đặc biệt là trong kiến trúc, thiết ...
    GameObject - Thao Tác với C# Script
    Giới thiệu các thành phần chung của 1 GameObject và các thao tác với C# ...
    Đồ Hoạ trên Cửa Sổ Dòng Lệnh - Console Graphics
    Các thư viện đồ họa đã phát triển rất mạnh mẽ, tận dụng gần như tối đa ...
    02/10/2014
    Các Hàm memset() - memcpy() - memcmp() Trong C
    Giới thiệu về các hàm thao tác trên bộ nhớ trong thư viện string.h trong ...
    21/07/2015
    Thao Tác với XML Sử Dụng TinyXML trong C++
    Hướng dẫn thao tác với XML sử dụng TinyXML trong C++.
    Phần 1 - Cây Nhị Phân Tìm Kiếm
    Các thao tác trên cây nhị phân tìm kiếm - khởi tạo, chèn, tìm kiếm, ...
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020