Operações Kotlin Bitwise e Bitshift (com exemplos)

Kotlin fornece várias funções (na forma de infixo) para realizar operações bit a bit e bithift. Neste artigo, você aprenderá a realizar operações em nível de bit em Kotlin com a ajuda de exemplos.

Os operadores bit a bit e bit shift são usados ​​em apenas dois tipos integrais ( Inte Long) para realizar operações em nível de bit.

Para executar essas operações, o Kotlin oferece 7 funções usando notação infixa.

1. ou

A orfunção compara bits correspondentes de dois valores. Se qualquer um dos bits for 1, ele dará 1. Se não, ele dará 0. Por exemplo,

 12 = 00001100 (em binário) 25 = 00011001 (em binário) Bitwise OU Operação de 12 e 25 00001100 ou 00011001 ________ 00011101 = 29 (em decimal)

Exemplo: bit a bit ou operação

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

Quando você executa o programa, a saída será:

 29

2. e

A andfunção compara bits correspondentes de dois valores. Se ambos os bits forem 1, ele é avaliado como 1. Se qualquer um dos bits for 0, ele será avaliado como 0. Por exemplo,

 12 = 00001100 (em binário) 25 = 00011001 (em binário) Operação de bits de 12 e 25 00001100 e 00011001 ________ 00001000 = 8 (em decimal)

Exemplo: bit a bit e operação

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

Quando você executa o programa, a saída será:

 8

3. xor

A xorfunção compara bits correspondentes de dois valores. Se os bits correspondentes forem diferentes, dá 1. Se os bits correspondentes são iguais, dá 0. Por exemplo,

 12 = 00001100 (em binário) 25 = 00011001 (em binário) Bitwise OU Operação de 12 e 25 00001100 xor 00011001 ________ 00010101 = 21 (em decimal)

Exemplo: operação xor bit a bit

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

Quando você executa o programa, a saída será:

 21

4. inv ()

A função inv () inverte o padrão de bits. Faz cada 0 a 1 e cada 1 a 0.

 35 = 00100011 (em binário) Complemento bit a bit Operação de 35 00100011 ________ 11011100 = 220 (em decimal)

Exemplo: complemento bit a bit

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

Quando você executa o programa, a saída será:

 -36

Por que estamos obtendo saída -36 em vez de 220?

É porque o compilador está mostrando o complemento de 2 desse número; notação negativa do número binário.

Para qualquer inteiro n, o complemento de 2 de n será -(n+1).

 Complemento do binário decimal 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Nota: O estouro é ignorado durante o cálculo do complemento de 2.

O complemento bit a bit de 35 é 220 (em decimal). O complemento de 2 de 220 é -36. Portanto, a saída é -36 em vez de 220.

5. shl

A shlfunção muda o padrão de bits para a esquerda por um certo número de bits especificados e os bits zero são deslocados para as posições de ordem inferior.

 212 (em binário: 11010100) 212 shl 1 avalia para 424 (em binário: 110101000) 212 shl 0 avalia para 212 (em binário: 11010100) 212 shl 4 avalia para 3392 (em binário: 110101000000)

Exemplo: deslocamento para a esquerda bit a bit

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

Quando você executa o programa, a saída será:

 424 212 3392

6. shr

A shrfunção muda o padrão de bits para a direita certin número de bits especificados.

 212 (em binário: 11010100) 212 sh. 1 avalia para 106 (em binário: 01101010) 212 sh. 0 avalia para 212 (em binário: 11010100) 212 sh. 8 avalia para 0 (em binário: 00000000)

Se o número for um número com sinal de complemento de 2, o bit de sinal é deslocado para as posições de ordem superior.

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

Quando você executa o programa, a saída será:

 106 212 0

7. ushr

A ushrfunção muda zero para a posição mais à esquerda.

Exemplo: shift direito com sinal e sem sinal

 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) )

Quando você executa o programa, a saída será:

 2 2 -3 2147483645

Observe como a função shift direita com e sem sinal funciona de maneira diferente para o complemento de 2.

O complemento de 2 2147483645é 3.

Artigos interessantes...