Toán tử nhị phân trong ví dụ Python

Chúng ta đã học về toán tử nhị phân, toán tử một ngôi, toán tử số học và chuỗi. Đây là cách chúng tôi thực hiện hầu hết các thao tác mà không phải lo lắng về logic ở cấp độ máy bên dưới. Sau đó, trong hướng dẫn này, chúng ta sẽ tìm hiểu về Toán tử bitwise Python và hiểu cách hoạt động có thể xảy ra chỉ với các số nhị phân. Do đó, chúng ta sẽ đi qua các chủ đề sau. -

  • Toán tử Bitwise trong Python là gì?
    • Tầm quan trọng của toán tử Bitwise
    • Toán tử Bitwise Python khác nhau
  • Thực hành cho toán tử Python Bitwise

Toán tử Bitwise trong Python là gì?

Toán tử Bitwise được sử dụng để thực hiện các thao tác trên các mẫu nhị phân (1s và 0s). Khi bạn thực hiện thao tác số nguyên 2 + 3 trên màn hình, máy tính sẽ đọc nó ở dạng nhị phân - 2 được biểu thị bằng 10 và 3 được biểu thị bằng 11 ở định dạng nhị phân. Do đó, tính toán của bạn sẽ giống như -

10 + 11 = 101

Lúc đầu, các toán tử bitwise có thể trông đáng sợ vì chúng chuyển đổi mọi thứ thành bit và chúng tôi không quen với 1 và 0. Tuy nhiên, một khi bạn đã hiểu chúng, chúng sẽ rất dễ thực hiện. Sau đó, hãy xem một ví dụ

3 x 2 = 6  Nếu bạn thực hiện thao tác tương tự ở định dạng nhị phân -

011 x 10 = 110

Nếu bạn để ý, khi chúng ta nhân một thứ gì đó với 2, chúng ta chỉ cần thực hiện một phép dịch trái. Do đó, 011 sẽ trở thành 110

Tương tự, 0010 sẽ trở thành 0100. Bây giờ bạn đã biết điều này, bạn có thể thấy việc nhân 2 dễ dàng như thế nào không? . Do đó, các toán tử thực hiện các thao tác này trên bit có thể được gọi là toán tử theo bit. Sau đó, chúng ta sẽ tìm hiểu chi tiết về các ca trái và phải này trong phần sau của hướng dẫn này

Trước khi tiếp tục, hãy tìm hiểu lý do tại sao toán tử bitwise lại cần thiết. Ngoài ra, chúng ta cũng sẽ hiểu tại sao chúng ta cần học chúng

Tầm quan trọng của toán tử Bitwise

Bây giờ bạn sẽ tự hỏi về sự cần thiết phải thực hiện các hoạt động bitwise. Hoạt động số học đã hoạt động khá tốt cho đến nay. Một số lý do sẽ thôi thúc bạn sử dụng toán tử bitwise là

  • Tốc độ thực hiện. Như chúng ta đã biết cho đến nay, máy tính (chính xác là trình biên dịch),  thay đổi mọi thứ thành 1 và 0. Vì vậy, tại sao không loại bỏ tải đó khỏi hệ thống? . Tuy nhiên, nếu bạn đang làm việc trên các chương trình Hệ thống Nhúng, điều này trở nên quan trọng
  • Thao tác bit. Rất nhiều lúc, bạn sẽ cần thao tác một số bit nhất định khi làm việc trên các hệ thống nhúng
    • Ví dụ dãy 111011 muốn biết bit nào có giá trị 0. Bạn có thể làm điều đó bằng cách sử dụng toán tử bitwise (chúng tôi sẽ đề cập đến điều đó sau về cách thực hiện điều đó)
  • kiểm tra lỗi. Toán tử bitwise được sử dụng rộng rãi trong kiểm tra lỗi. Nếu bạn đang gửi một số bit đến một máy tính khác trên một máy chủ khác, nó sẽ dễ xảy ra một số lỗi. Sau đó, bạn có thể xác định chúng bằng toán tử bitwise. Điều này rất quan trọng đối với các hệ thống nhúng và python là một trong những lựa chọn nổi bật cho điều đó

Đến bây giờ, bạn đã hiểu rõ tại sao chúng ta cần các toán tử bitwise. Sau đó, hãy tiếp tục với các loại toán tử bitwise

Toán tử Bitwise Python khác nhau

Python cung cấp một số toán tử hữu ích để thực hiện các thao tác theo bit. Sau đó, hãy hiểu những điều này một cách chi tiết

VÀ Toán tử Bitwise trong Python

Toán tử & (AND ) được sử dụng để thực hiện AND giữa hai bit. Ngoài ra, một quy tắc đơn giản cho AND là, nếu cả hai bit đang xét là 1, thì câu trả lời là 1 khác 0

1 & 1 = 1

1 & 0 = 0

0 & 0 = 0

0 & 1 = 0

Bây giờ trên cùng một dòng, bạn có thể thử 11 & 01 không?

Hơn nữa, chúng ta đã thảo luận trước đó, làm thế nào để tìm ra bit nào có giá trị 0. Điều này được thực hiện bằng thao tác AND

  • Nếu bạn VÀ một số có 11111111 (hiện tại đang xem xét 1 byte), nếu bit kết quả là 0, lỗi sẽ xảy ra tại vị trí đó

Trong phép tính sau đây, chúng tôi đang vận hành 100 và 101 bằng toán tử & bitwise trong Python. Bạn đã biết rằng để đại diện cho một số nhị phân, chúng tôi thêm tiền tố vào 0b

Do đó, bạn có thể viết trực tiếp câu lệnh sau trong trình chỉnh sửa (gốc hoặc đám mây) và chạy để lấy đầu ra. Nếu bạn cảm thấy thoải mái với IDE gốc thì bạn có thể tải xuống PyCharm hoặc nếu không, bạn cũng có thể sử dụng trình chỉnh sửa dựa trên đám mây Repl. Sau đó, trong bài đăng này, chúng tôi sẽ sử dụng Rep. nó

Thực thi đoạn mã sau trong trình chỉnh sửa

in (0b100 & 0b101)

Toán tử nhị phân trong ví dụ Python

Ghi chú. 100 là 4 ở dạng nhị phân trong khi 101 là 5. Ngoài ra, tiền tố 0b biểu thị rằng chúng tôi đang đề cập đến các giá trị nhị phân chứ không phải số thập phân 100 và 101

Như mong đợi, chúng tôi nhận được kết quả là 4. Bạn phải lưu ý rằng mặc dù chúng tôi thực hiện phép tính ở dạng nhị phân, chúng tôi vẫn nhận được kết quả ở dạng thập phân. Ngoài ra, đây là hành vi mặc định trong ngôn ngữ lập trình. Ngoài ra, nếu không có từ khóa tham chiếu rõ ràng, kết quả sẽ ở dạng thập phân

Giống như chúng tôi đã gọi 0b để biểu thị số nhị phân trong đầu vào, để có được đầu ra nhị phân, chúng tôi cần đề cập đến từ khóa "bin "

Sau đó, thực hiện các thao tác sau để có kết quả tương tự ở dạng nhị phân

in(bin(0b100 & 0b101))

Điều này sẽ mang lại kết quả sau

Toán tử nhị phân trong ví dụ Python

Thêm ví dụ

  • 12 & 14 = 1100 & 1110 = 1100 = 12
  • 23 & 15 = 10111 & 01111 = 00111 = 7
  • 10 & 12 = 1010 & 1100 = 1000 = 8

HOẶC Toán tử Bitwise trong Python

Các. Toán tử (OR ) được sử dụng để thực hiện phép toán OR trên hai bit. Hơn nữa, một quy tắc đơn giản cho OR là, bit kết quả là 0 khi và chỉ khi cả hai bit được xem xét là 0, nếu không thì kết quả là 1

1. 1 = 1

1. 0 = 1

0. 1 = 1

0. 0 = 0

Trong ví dụ dưới đây, chúng tôi đang vận hành số 5 (101) với 4 (100) và mong đợi câu trả lời là 101 (5) chỉ là bit ở giữa với 0

Toán tử nhị phân trong ví dụ Python

Như mong đợi, câu trả lời cho 5. 4 là 5

Thêm ví dụ

  • 12. 14 = 1100. 1110 = 1110 = 14
  • 23. 15 = 10111. 01111 = 11111 = 31
  • 10. 12 = 1010. 1100 = 1110 =  14

Không phải toán tử Python Bitwise

Toán tử ~ (NOT ) là một toán tử rất đơn giản và hoạt động đúng như tên gọi của nó. Ngoài ra, nó lật bit từ 0 thành 1 và từ 1 thành 0. Nhưng khi được sử dụng trong lập trình như Python, toán tử này được sử dụng để trả về phần bù của số

  • Do đó, ~10 = -11 chứ không phải 01. Hơn nữa, kiến ​​thức trước về phần bù 1 và phần bù 2 là cần thiết để hiểu vai trò của toán tử này ở đây
  • Để hiểu khái niệm này, bạn nên biết rằng python trả về phần bù 2 của số. Phần bù 2 của số là ~(num + 1)
  • Do đó ~10 được trả về là ~(10 + 1). Đó là tất cả những điều bạn cần biết. Chỉ cần nhớ phím tắt ~(num + 1)

Thực thi đoạn mã sau trong trình chỉnh sửa để xác minh đầu ra không hoạt động của 24 (11000)

in (không phải (0b11000))

Toán tử nhị phân trong ví dụ Python

Câu trả lời đến -25 như mong đợi

Thêm ví dụ

  • ~13  (0b01101) =  -14
  • ~16 (0b010000) =  -17
  • ~31 (0b011111) = -32

Toán tử Bitwise XOR Python

Toán tử ^ (XOR ) được sử dụng để XOR hai bit đang hoạt động. Thao tác XOR rất đơn giản. Nếu hai bit giống nhau thì bit kết quả là 0 khác 1

1^1 = 0

1^0 = 1

0^1 = 1

0^0 = 0

Vậy 1010^1011 sẽ ra 0001

Điều tương tự cũng được thể hiện bên dưới bằng cách thực hiện các dòng sau

in(0b1010 ^ 0b1011)

Toán tử nhị phân trong ví dụ Python

Toán tử XOR cực kỳ hữu ích trong lĩnh vực khoa học máy tính và hệ thống nhúng. Nó được sử dụng rất rộng rãi trong các tính toán logic để làm cho quá trình nhanh hơn. Ví dụ: như bạn đã thấy ở trên, 10 và 11 cho kết quả là 1 khi XOR được thực hiện trên chúng. Vì vậy muốn biết 2 số có liên tiếp hay không ta chỉ cần XOR chúng và kiểm tra xem kết quả có phải là 1 hay không

Thêm ví dụ

  • 12^14 = 1100^1110 = 0010 = 2
  • 23^15 = 10111^01111 = 11000 = 24
  • 10 ^ 12 = 1010 ^ 1100 = 0110 = 6

Shift trái trong Python

Toán tử << (Bitwise left shift ), như tên gọi của nó, dịch chuyển các bit về phía bên trái thành một số được biểu thị ở bên phải của toán tử này

Ví dụ: 1 << 2 sẽ dịch chuyển 1 sang trái cho 2 giá trị. Về mặt bit, nó sẽ được trình bày như sau

  • 1 = 0001
  • 1 << 2. 0001 << 2 = 0100 tôi. e. 4

Thực thi đoạn mã dưới đây để xem kết quả tương tự

in (0b0001 << 2)

Toán tử nhị phân trong ví dụ Python

Đúng như dự đoán, câu trả lời cho 1 << 2 là 4

Thêm ví dụ

  • 14 << 1 = 01110 << 1 = 11100 = 28
  • 24 << 4 = 000011000 << 4 = 110000000 = 384
  • 19 << 3 = 00010011 << 3 =  10011000 = 152

Bây giờ bạn sẽ nhận ra rằng khi bạn biểu diễn các số nhị phân trong một trình soạn thảo, bạn sẽ cần thêm tiền tố 0b trước khi thực thi đoạn mã trên

Dịch chuyển phải trong Python

Toán tử >> (dịch chuyển phải), như tên gọi của nó, dịch chuyển các bit về phía bên phải thành một số được biểu thị ở bên phải của toán tử

Ví dụ: 10 >> 2 sẽ dịch chuyển các bit (1010) sang bên phải 2

  • 10 = 1010
  • 10 >> 2. 1010 >> 2 = 0010 = 2

Hãy xác nhận điều tương tự bằng cách thực hiện các dòng sau

in(0b1010 >> 2)

Toán tử nhị phân trong ví dụ Python

Như mong đợi, câu trả lời cho 10 >> 2 là 2

Thêm ví dụ

  • 14 >> 1 = 01110 >> 1 = 00111 = 7
  • 24 >> 4 = 000011000 >> 4 = 00001 = 1
  • 19 >> 3 = 00010011 >> 3 =  000010 = 2

Điều này đưa chúng ta đến phần cuối của việc học các toán tử bitwise trong Python hoặc bất kỳ ngôn ngữ lập trình nào cho vấn đề đó. Chìa khóa đối với toán tử bitwise là không biết định nghĩa của chúng nhưng để có thể triển khai chúng trong chương trình của bạn. Để sử dụng hiệu quả các toán tử theo bit, hãy thực hành nhiều bằng cách sử dụng các thao tác trên bit và khám phá cách chúng hoạt động trong các trường hợp khác nhau. Khi bạn nắm được các toán tử này, chúng là cách tốt nhất và nhanh nhất để giải quyết vấn đề

Luyện tập

Đối với thực hành của bạn, tôi đã đề cập đến một vài thao tác sử dụng các toán tử được thảo luận trong bài đăng này. Các toán hạng này không được viết thành bit vì việc khám phá chúng sẽ giúp bạn nắm bắt được khái niệm này

Các ví dụ về toán tử trong Python là gì?

Toán tử gán Python .
= Gán giá trị
+= Thêm VÀ
-= Trừ VÀ
*= Nhân VÀ
/= Chia VÀ
%= Mô-đun AND
**= Số mũ AND
//= Phân chia tầng

Toán tử bitwise trong Python với ví dụ là gì?

Toán tử AND theo bit Trả về 1 nếu cả hai bit là 1 khác 0. Bitwise hoặc toán tử Trả về 1 nếu một trong hai bit là 1 khác 0. . Toán tử bitwise

7 toán tử trong Python là gì?

Toán tử Python .
toán tử số học
Toán tử gán
Toán tử so sánh
Toán tử logic
Toán tử nhận dạng
nhà khai thác thành viên
Toán tử bitwise

Ví dụ về toán tử bitwise là gì?

Các loại Toán tử Bitwise trong C