• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Operadores Bitwise em Golang

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
Nos últimos dias venho estudando a linguagem Go e me deparei com um assunto que achei muito interessante: os operadores bit a bit. Como eu ainda não os conhecia bem, resolvi compartilhar o que aprendi com vocês.

Além dos operadores de comparação já conhecidos && (E), || (OU), > (Maior que), etc., Golang possui assim como em outras linguagens os operadores bitwise, que são representados pelo símbolos &, |, ^, >>, << e &^. No entanto, Go possui um outro operador que se difere das outras linguagens de programação, o operador: &^ (AND NOT) que irei explicar o seu funcionamento e dos outros operadores bitwise logo abaixo:

Exemplos


Vou utilizar como base duas variáveis inteiras com suas respectivas representações binárias comentadas ao lado.


var a = 6 //0110
var b = 5 //0101
Operador & (AND) bit a bit


Retorna 1 apenas se ambos os bits forem 1.


// a = 0110
// b = 0101
// a&b = 0100
fmt.Println("a&b: ", a&b) // 4
Operador | (OR) bit a bit


Retorna 1 se alguns dos dois bits dos operandos forem 1


// a = 0110
// b = 0101
// a|b = 0111
fmt.Println("a|b: ", a|b) // 7
Operador ^ (XOR) - OU exclusivo bit a bit


Retorna 1 se os dois forem diferentes


// a = 0110
// b = 0101
// a^b = 0011
fmt.Println("a^b: ", a^b) // 3
Operador &^ (AND NOT) - limpeza de bit


Se o bit no segundo operando for 0: mantém o bit do primeiro operando como está.
Se o bit no segundo operando for 1: força o bit do resultado a ser 0 (independente do primeiro operando).


// a = 0110
// b = 0101
// a&^b = 0010
fmt.Println("a&^b: ", a&^b) // 10
Operador << - Deslocamento à esquerda (left shift)


Desloca os bits de a para a esquerda, adicionando zeros à direita.


// a = 0110
// a = 0110 << 2
// a = 011000
// a = 0001 1000 -> representação binária final
fmt.Println("a<<2: ", a<<2) // 24
Operador >> - deslocamento à direita (right shift)


Desloca os bits de a para a direita, descartando os bits da direita.


// a = 0110
// a = 0110 >> 2
// a = 01
// a = 0001 -> representação binária final
fmt.Println("a>>2: ", a>>2) // 1
Conclusão


E aí, gostou?
Espero que essa explicação tenha sido útil de alguma forma. Caso tenha ficado com alguma dúvida ou tenha encontrado algum erro na minha explicação, fique à vontade para comentar ou me chamar — será um prazer trocar ideias!

Muito obrigado por ler!


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу