Thứ Bảy, 11 tháng 5, 2024

15. Toán tử thao tác Bit trong Python

Chúng ta để riêng Toán tử thao tác Bit trong Python vì chúng tôi muốn bạn nhớ lại một vài căn bản

CPU của máy tính không hiểu được những chỉ thị bằng ngôn ngữ của con người, nó chỉ hiểu ngôn ngữ riêng gọi là ngôn ngữ máy (machine language) . Máy tính hay mọi mạch điện nói chung chỉ có thể "hiểu" hai trạng thái mà thôi: 

Có điện - Không có điện

Có tín hiệu - Không có tín hiệu

Điện thế cao - Điện thế thấp

Và ta có thể biểu diễn cho hai trạng thái đó bằng hai con số 10.

Mọi chỉ thị cho máy tính sẽ là một chuỗi những số 1 và 0, ví dụ 0001110010 hay 10101001110...

Từ đây sinh ra khái niệm Bit, Byte, hai thuật ngữ chuyên ngành trong công nghệ.


Bit là gì?
Bit được viết tắt từ Binary digit ký hiệu là "b". Bit được biết đến là đơn vị nhỏ nhất được dùng để biểu thị thông tin của máy tính. Đây cũng là đơn vị nhỏ nhất trong việc lưu trữ thông tin trong hệ thống và lưu trữ dung lượng của các bộ nhớ như: ROM, RAM, ổ cứng, USB, thẻ nhớ…
Thông thường các bit sẽ được biểu diễn dưới dạng số nhị phân là 0 hoặc 1. Mỗi một bit ứng với một số (1 hoặc 0) và một bit chỉ có thể nhận diện được cũng như hiểu được 1 hoặc trong 2 trạng thái thông tin bật hoặc tắt, đúng hoặc sai hay có hoặc không.
Chuỗi bit là một chuỗi liên tiếp các bit (1 hoặc 0) được sử dụng để biểu diễn thông tin của một đối tượng trong máy tính. Trong ngôn ngữ lập trình, các loại dữ liệu như số, ký tự, hình ảnh, âm thanh và các thành phần khác đều được mô tả dưới dạng các dãy bit. Chẳng hạn, một ký tự chữ cái như 'a' có thể được biểu diễn bằng một chuỗi 8 bit, tương đương với 1 byte (ta sẽ nói bên dưới), với giá trị là 01100001.


Từ khái niệm Bit sẽ sinh ra khái niệm Byte.

Byte là gì?
Byte là một loại đơn vị được dùng để lưu trữ các dữ liệu trong bộ nhớ của máy tính và nó được ký hiệu là chữ B in hoa "B". Loại đơn vị này sẽ dùng để mô tả một chuỗi bit cố định, 1 Byte có 8 bit và sẽ biểu thị được 2^8=256 giá trị khác nhau của thông tin. Chính vì vậy với 1 Byte nó sẽ đủ để lưu trữ số có dấu trừ -128 đến 127 hoặc số nguyên không dấu từ 0 đến 255. Hoặc như ví dụ trên ta sẽ thấy các chữ cái a,b,c,d....mỗi chữ sẽ được biểu thị bằng 1 byte. Để thể hiện một từ chúng ta phải cần khoảng 10 byte. Và, để thể hiện một câu văn ngắn chúng ta phải cần xấp xỉ 100 byte.


Kiểu dữ liệu (Data type) là gì?
Ta có thể hiểu nôm na kiểu dữ liệu (data type) là cách để phân loại và mô tả cách dữ liệu được lưu trữ và xử lý trong ngôn ngữ lập trình. Hoặc nói cô đọng hơn, kiểu dữ liệu chính là phần xác định các giá trị mà một biến có thể nhận hay giá trị mà một hàm có thể trả về. Ví dụ biến a có kiểu dữ liệu số nguyên, biến b có kiểu dữ liệu số thực...hàm c sẽ trả về kiểu dữ liệu số nguyên, hàm d sẽ trả về kiểu dữ liệu chuỗi ký tự.

 

Đây là bảng ASCII, các bạn tham khảo sẽ thấy giả sử a = 60 và b = 13 thì định dạng nhị phân của chúng lần lượt là:

a = 0011 1100

b = 0000 1101

Từ đó có khái niệm về  toán tử thao tác Bit.

 

Toán tử thao tác Bit trong Python

Toán tử thao tác bit làm việc trên các bit và thực hiện các hoạt động theo từng bit. Trong bảng dưới, giả sử a = 60 và b = 13

Toán tửMô tảVí dụ
&Sao chép bit là 1 tới kết quả nếu hai bit đều là 1
(a & b) cho kết quả 0000 1100
|Sao chép bit là 1 tới kết quả nếu một trong hai bit là 1(a | b) = 61 (tức là 0011 1101)
^Sao chép bit là 1 tới kết quả nếu chỉ một trong hai bit là 1(a ^ b) = 49 (tức là 0011 0001)
~Đây là toán tử một ngôi, được sử dụng để đảo ngược bit(~a ) = -61 (tức là 1100 0011)
<<Toán tử dịch trái nhị phân. Giá trị của toán hạng trái được dịch chuyển sang trái một số lượng bit đã được xác định bởi toán hạng phảia << = 240 (tức là 1111 0000)
>>Toán tử dịch phải nhị phân. Giá trị của toán hạng trái được dịch chuyển sang phải một số lượng bit đã được xác định bởi toán hạng phảia >> = 15 (tức là 0000 1111)

 

Hãy xét toán tử đầu tiên &, nếu cả hai bit đều là 1 thì kết quả là 1. 


 

Tương tự với các toán tử khác.

Đây là code để chúng ta thực hành và hiểu về toán tử thao tác Bit trong Python

a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
c = 0
 
c = a & b;        # 12 = 0000 1100
print ("Line 1 - Value of c is ", c)
 
c = a | b;        # 61 = 0011 1101
print ("Line 2 - Value of c is ", c)
 
c = a ^ b;        # 49 = 0011 0001
print ("Line 3 - Value of c is ", c)
 
c = ~a;           # -61 = 1100 0011
print ("Line 4 - Value of c is ", c)
 
c = a << 2;       # 240 = 1111 0000
print ("Line 5 - Value of c is ", c)
 
c = a >> 2;       # 15 = 0000 1111
print ("Line 6 - Value of c is ", c)

 

Bấm Run để chạy chương trình


 


Phần tiếp theo


Phần trước



Không có nhận xét nào:

Đăng nhận xét