Kotlin Bitwise và Bitshift Operations (Với các ví dụ)

Kotlin cung cấp một số chức năng (ở dạng infix) để thực hiện thao tác bitwise và bithift. Trong bài viết này, bạn sẽ học cách thực hiện thao tác mức bit trong Kotlin với sự trợ giúp của các ví dụ.

Toán tử bit và dịch chuyển bit chỉ được sử dụng trên hai kiểu tích phân ( IntLong) để thực hiện các phép toán mức bit.

Để thực hiện các thao tác này, Kotlin cung cấp 7 hàm sử dụng ký hiệu infix.

1. hoặc

Các orchức năng so sánh các bit tương ứng của hai giá trị. Nếu một trong hai bit là 1, nó cho 1. Nếu không, nó cho 0. Ví dụ,

 12 = 00001100 (Trong nhị phân) 25 = 00011001 (Trong nhị phân) Hoạt động theo chiều bit HOẶC của 12 và 25 00001100 hoặc 00011001 ________ 00011101 = 29 (Trong thập phân)

Ví dụ: Bitwise hoặc Hoạt động

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 29

2 và

Các andchức năng so sánh các bit tương ứng của hai giá trị. Nếu cả hai bit là 1, nó được đánh giá là 1. Nếu một trong hai bit là 0, nó được đánh giá là 0. Ví dụ:

 12 = 00001100 (Trong nhị phân) 25 = 00011001 (Trong nhị phân) Hoạt động bit của 12 và 25 00001100 và 00011001 ________ 00001000 = 8 (Trong thập phân)

Ví dụ: Bitwise và hoạt động

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 số 8

3. xor

Các xorchức năng so sánh các bit tương ứng của hai giá trị. Nếu các bit tương ứng khác nhau, nó cho kết quả là 1. Nếu các bit tương ứng giống nhau, nó sẽ cho 0. Ví dụ:

 12 = 00001100 (Trong nhị phân) 25 = 00011001 (Trong nhị phân) Hoạt động theo chiều bit HOẶC của 12 và 25 00001100 xor 00011001 ________ 00010101 = 21 (Trong thập phân)

Ví dụ: Hoạt động Bitwise xor

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 21

4. inv ()

Hàm inv () đảo ngược mẫu bit. Nó thực hiện mọi 0 đến 1 và cứ 1 đến 0.

 35 = 00100011 (Trong số nhị phân) Bổ sung theo chiều bit Hoạt động của 35 00100011 ________ 11011100 = 220 (Trong thập phân)

Ví dụ: Phần bổ sung bitwise

 fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 -36

Tại sao chúng ta nhận được đầu ra -36 thay vì 220?

Đó là bởi vì trình biên dịch đang hiển thị phần bù 2 của số đó; ký hiệu âm của số nhị phân.

Với bất kỳ số nguyên n nào, phần bù 2 của n sẽ là -(n+1).

 Phần bù của Decimal Binary 2 --------------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (thập phân) 1 00000001 - (11111110 + 1) = -11111111 = -256 (thập phân) 12 00001100 - (11110011 +1) = -11110100 = -244 (thập phân) 220 11011100 - (00100011 + 1) = -00100100 = -36 (thập phân) Lưu ý: Phần tràn bị bỏ qua khi tính toán phần bù của 2.

Phần bù theo bit của 35 là 220 (ở dạng thập phân). Phần bù của 2 của 220 là -36. Do đó, đầu ra là -36 thay vì 220.

5. shl

Các shlthay đổi chức năng cắn mô hình sang bên trái bởi số lượng nhất định các bit chỉ định, và không bit được chuyển vào các vị trí ở vị trí thấp.

 212 (Trong hệ nhị phân: 11010100) 212 shl 1 cho kết quả là 424 (Trong nhị phân: 110101000) 212 shl 0 cho kết quả là 212 (Trong hệ nhị phân: 11010100) 212 shl 4 cho kết quả là 3392 (Trong nhị phân: 110101000000)

Ví dụ: Dịch trái bitwise

 fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 424 212 3392

6. shr

Các shrthay đổi chức năng cắn pattery sang bên phải bằng số certin bit được xác định.

 212 (Trong hệ nhị phân: 11010100) 212 shr 1 cho kết quả là 106 (Trong hệ nhị phân: 01101010) 212 shr 0 cho kết quả là 212 (Trong hệ nhị phân: 11010100) 212 shr 8 cho kết quả là 0 (Trong nhị phân: 00000000)

Nếu số là số có dấu bù của 2, bit dấu được chuyển vào các vị trí bậc cao.

 fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )

Khi bạn chạy chương trình, phần mở rộng sẽ là:

 106 212 0

7. ushr

Các ushrthay đổi chức năng bằng không vào vị trí tận cùng bên trái.

Ví dụ: Shift phải có dấu và không dấu

 fun main(args: Array) ( val number1 = 5 val number2 = -5 // Signed right shift println(number1 shr 1) // Unsigned right shift println(number1 ushr 1) // Signed right shift println(number2 shr 1) // Unsigned right shift println(number2 ushr 1) )

Khi bạn chạy chương trình, đầu ra sẽ là:

 2 2 -3 2147483645

Lưu ý, cách chức năng dịch chuyển bên phải có dấu và không dấu hoạt động khác nhau đối với phần bù của 2.

Phần bù của 2 21474836453.

thú vị bài viết...