[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"article-explicando_operadores_bitwise":3,"article-surround-explicando_operadores_bitwise":488},{"id":4,"title":5,"author":6,"body":8,"description":99,"extension":478,"image":479,"keywords":480,"meta":481,"navigation":176,"path":482,"publishedAt":483,"seo":484,"stem":485,"tags":486,"__hash__":487},"articles\u002Farticles\u002Fexplicando_operadores_bitwise.md","Explicando operações Bitwise",{"name":7},"Danilo Pinotti",{"type":9,"value":10,"toc":466},"minimark",[11,15,20,29,36,43,91,97,100,104,107,117,120,128,131,135,138,144,149,159,162,209,213,220,222,263,267,274,276,316,320,331,345,347,383,387,398,400,438,442,445,448,451,462],[12,13,5],"h1",{"id":14},"explicando-operações-bitwise",[16,17,19],"h2",{"id":18},"introdução","Introdução",[21,22,23,24,28],"p",{},"Há tempos que eu tentava aprender operadores Bitwise, mas nunca consegui avançar nos estudos por não entende-los na sua ",[25,26,27],"strong",{},"essência",".",[21,30,31,32,35],{},"Existem várias utilidades para operadores Bitwise. Algumas delas possibilita você ganhar desempenho nas suas aplicações e reduzir o espaço de armazenamento de informações, como, por exemplo, permissões em sistemas Unix em que, com apenas ",[25,33,34],{},"3 bits",", é possível identificar se o usuário tem permissão de escrita, leitura e\u002Fou execução.",[21,37,38,39,42],{},"Operadores Bitwise trabalham com ",[25,40,41],{},"bits"," (pois é) e, quando vemos os seus retornos em números decimais, podemos gerar confusões em nossas cabeças. Por exemplo:",[44,45,50],"pre",{"className":46,"code":47,"language":48,"meta":49,"style":49},"language-php shiki shiki-themes github-light github-dark","5 ^ 2   \u002F\u002F 7\n10 & 3  \u002F\u002F 2\n10 & 4  \u002F\u002F 0\n5 | 3   \u002F\u002F 7\n5 \u003C\u003C 3  \u002F\u002F 40\n8 >> 3  \u002F\u002F 1\n","php","",[51,52,53,61,67,73,79,85],"code",{"__ignoreMap":49},[54,55,58],"span",{"class":56,"line":57},"line",1,[54,59,60],{},"5 ^ 2   \u002F\u002F 7\n",[54,62,64],{"class":56,"line":63},2,[54,65,66],{},"10 & 3  \u002F\u002F 2\n",[54,68,70],{"class":56,"line":69},3,[54,71,72],{},"10 & 4  \u002F\u002F 0\n",[54,74,76],{"class":56,"line":75},4,[54,77,78],{},"5 | 3   \u002F\u002F 7\n",[54,80,82],{"class":56,"line":81},5,[54,83,84],{},"5 \u003C\u003C 3  \u002F\u002F 40\n",[54,86,88],{"class":56,"line":87},6,[54,89,90],{},"8 >> 3  \u002F\u002F 1\n",[21,92,93,96],{},[25,94,95],{},"Atenção:"," Os operadores bitwise são muito parecidos com os operadores condicionais das principais linguagens de programação, embora o seu funcionamento seja um pouco diferente.",[21,98,99],{},"O objetivo deste artigo é explicar alguns dos principais operadores bitwise da forma em que finalmente consegui entendê-los, e mostrar o caminho que eu segui para conseguir esclarecê-los na minha mente.",[16,101,103],{"id":102},"um-pouco-sobre-bits-e-o-sistema-binário","Um pouco sobre bits e o sistema binário",[21,105,106],{},"Antes de explicar como os operadores bitwise funcionam, é importante que você saiba como trabalhar com números na base 2, também conhecido como números binários.",[21,108,109,110,113,114],{},"Um número com base 10 (decimal) significa que cada algarismo pode ir ",[25,111,112],{},"de 0 até 9"," (10 números), enquanto números binários, cada algarismo poderá ser ",[25,115,116],{},"somente 0 ou 1",[21,118,119],{},"Por exemplo:",[44,121,126],{"className":122,"code":124,"language":125},[123],"language-text","Número decimal: 5\nNúmero 5 binário: 101\n\nNúmero decimal: 14\nNúmero 14 binário: 1110\n","text",[51,127,124],{"__ignoreMap":49},[21,129,130],{},"Se você não souber como fazer conversão de números decimais para binários, recomendo ler algum artigo sobre isso antes de prosseguir na leitura.",[16,132,134],{"id":133},"operadores","Operadores",[21,136,137],{},"A seguir, explicarei cada um dos operadores mostrados na seção anterior e verá que não é tão complicado como parece.",[21,139,140,141,143],{},"Antes de prosseguirmos com a explicação, é necessário ter em mente que tudo tem a ver com ",[25,142,41],{},", 0 e 1, logo, os operadores trabalham em cima de números binários.",[145,146,148],"h3",{"id":147},"operador-bitwise-and","Operador \"&\" (bitwise AND)",[21,150,151,152,155,156,28],{},"Este operador compara dois bits e retorna ",[25,153,154],{},"1"," se ",[25,157,158],{},"ambos os bits comparados forem 1",[21,160,161],{},"Exemplo:",[44,163,165],{"className":46,"code":164,"language":48,"meta":49,"style":49},"5 & 3  \u002F\u002F 1\n\n\u002F\u002F 5 (decimal) = 101 (binário)\n\u002F\u002F 3 (decimal) = 011 (binário)\n\n  101   \u002F\u002F (decimal 5)\n& 011   \u002F\u002F (decimal 3)\n= 001   \u002F\u002F (decimal 1)\n",[51,166,167,172,178,183,188,192,197,203],{"__ignoreMap":49},[54,168,169],{"class":56,"line":57},[54,170,171],{},"5 & 3  \u002F\u002F 1\n",[54,173,174],{"class":56,"line":63},[54,175,177],{"emptyLinePlaceholder":176},true,"\n",[54,179,180],{"class":56,"line":69},[54,181,182],{},"\u002F\u002F 5 (decimal) = 101 (binário)\n",[54,184,185],{"class":56,"line":75},[54,186,187],{},"\u002F\u002F 3 (decimal) = 011 (binário)\n",[54,189,190],{"class":56,"line":81},[54,191,177],{"emptyLinePlaceholder":176},[54,193,194],{"class":56,"line":87},[54,195,196],{},"  101   \u002F\u002F (decimal 5)\n",[54,198,200],{"class":56,"line":199},7,[54,201,202],{},"& 011   \u002F\u002F (decimal 3)\n",[54,204,206],{"class":56,"line":205},8,[54,207,208],{},"= 001   \u002F\u002F (decimal 1)\n",[145,210,212],{"id":211},"operador-bitwise-or","Operador \"|\" (bitwise OR)",[21,214,151,215,155,217,28],{},[25,216,154],{},[25,218,219],{},"um dos bits for 1",[21,221,161],{},[44,223,225],{"className":46,"code":224,"language":48,"meta":49,"style":49},"5 | 3  \u002F\u002F 7\n\n\u002F\u002F 5 (decimal) = 101 (binário)\n\u002F\u002F 3 (decimal) = 011 (binário)\n\n  101   \u002F\u002F (5 decimal)\n| 011   \u002F\u002F (3 decimal)\n= 111   \u002F\u002F (7 decimal)\n",[51,226,227,232,236,240,244,248,253,258],{"__ignoreMap":49},[54,228,229],{"class":56,"line":57},[54,230,231],{},"5 | 3  \u002F\u002F 7\n",[54,233,234],{"class":56,"line":63},[54,235,177],{"emptyLinePlaceholder":176},[54,237,238],{"class":56,"line":69},[54,239,182],{},[54,241,242],{"class":56,"line":75},[54,243,187],{},[54,245,246],{"class":56,"line":81},[54,247,177],{"emptyLinePlaceholder":176},[54,249,250],{"class":56,"line":87},[54,251,252],{},"  101   \u002F\u002F (5 decimal)\n",[54,254,255],{"class":56,"line":199},[54,256,257],{},"| 011   \u002F\u002F (3 decimal)\n",[54,259,260],{"class":56,"line":205},[54,261,262],{},"= 111   \u002F\u002F (7 decimal)\n",[145,264,266],{"id":265},"operador-bitwise-xor","Operador \"^\" (bitwise XOR)",[21,268,151,269,155,271,28],{},[25,270,154],{},[25,272,273],{},"os bits comparados forem diferentes",[21,275,161],{},[44,277,279],{"className":46,"code":278,"language":48,"meta":49,"style":49},"5 ^ 3  \u002F\u002F 6\n\n\u002F\u002F 5 (decimal) = 101 (binário)\n\u002F\u002F 3 (decimal) = 011 (binário)\n\n  101   \u002F\u002F (5 decimal)\n^ 011   \u002F\u002F (3 decimal)\n= 110   \u002F\u002F (6 decimal)\n",[51,280,281,286,290,294,298,302,306,311],{"__ignoreMap":49},[54,282,283],{"class":56,"line":57},[54,284,285],{},"5 ^ 3  \u002F\u002F 6\n",[54,287,288],{"class":56,"line":63},[54,289,177],{"emptyLinePlaceholder":176},[54,291,292],{"class":56,"line":69},[54,293,182],{},[54,295,296],{"class":56,"line":75},[54,297,187],{},[54,299,300],{"class":56,"line":81},[54,301,177],{"emptyLinePlaceholder":176},[54,303,304],{"class":56,"line":87},[54,305,252],{},[54,307,308],{"class":56,"line":199},[54,309,310],{},"^ 011   \u002F\u002F (3 decimal)\n",[54,312,313],{"class":56,"line":205},[54,314,315],{},"= 110   \u002F\u002F (6 decimal)\n",[145,317,319],{"id":318},"operador-bitwise-left-shift","Operador \"\u003C\u003C\" (bitwise left shift)",[21,321,322,323,326,327,330],{},"Com este operador, o número que está à direita representa a ",[25,324,325],{},"quantidade de zeros"," que serão adicionados à ",[25,328,329],{},"direita"," do número que se encontra à esquerda do operador.",[21,332,333,334,337,338,341,342,28],{},"Em outras palavras, na operação ",[51,335,336],{},"5 \u003C\u003C 3",", este operador ",[25,339,340],{},"\"adiciona 3 zeros\""," à direita do número ",[25,343,344],{},"5 binário",[21,346,161],{},[44,348,350],{"className":46,"code":349,"language":48,"meta":49,"style":49},"5 \u003C\u003C 3  \u002F\u002F 40\n\n\u002F\u002F 5 (decimal) = 101 (binário)\n\n   101      \u002F\u002F (5 decimal)\n\u003C\u003C    000   \u002F\u002F são adicionados 3 \"zeros\" à direita\n = 101000   \u002F\u002F (40 decimal)\n",[51,351,352,356,360,364,368,373,378],{"__ignoreMap":49},[54,353,354],{"class":56,"line":57},[54,355,84],{},[54,357,358],{"class":56,"line":63},[54,359,177],{"emptyLinePlaceholder":176},[54,361,362],{"class":56,"line":69},[54,363,182],{},[54,365,366],{"class":56,"line":75},[54,367,177],{"emptyLinePlaceholder":176},[54,369,370],{"class":56,"line":81},[54,371,372],{},"   101      \u002F\u002F (5 decimal)\n",[54,374,375],{"class":56,"line":87},[54,376,377],{},"\u003C\u003C    000   \u002F\u002F são adicionados 3 \"zeros\" à direita\n",[54,379,380],{"class":56,"line":199},[54,381,382],{}," = 101000   \u002F\u002F (40 decimal)\n",[145,384,386],{"id":385},"operador-bitwise-right-shift","Operador \">>\" (bitwise right shift)",[21,388,389,390,393,394,397],{},"Neste operador, o número que está à direita representa a ",[25,391,392],{},"quantidade de bits"," que serão ",[25,395,396],{},"removidos",", da direita para a esquerda, do número que se encontra à esquerda do operador.",[21,399,161],{},[44,401,403],{"className":46,"code":402,"language":48,"meta":49,"style":49},"14 >> 2  \u002F\u002F 3\n\n\u002F\u002F 14 (decimal) = 1110 (binário)\n\n   1110  \u002F\u002F (14 decimal)\n>>       \u002F\u002F são removidos 2 bits da direita para a esquerda\n =   11  \u002F\u002F (3 decimal)\n",[51,404,405,410,414,419,423,428,433],{"__ignoreMap":49},[54,406,407],{"class":56,"line":57},[54,408,409],{},"14 >> 2  \u002F\u002F 3\n",[54,411,412],{"class":56,"line":63},[54,413,177],{"emptyLinePlaceholder":176},[54,415,416],{"class":56,"line":69},[54,417,418],{},"\u002F\u002F 14 (decimal) = 1110 (binário)\n",[54,420,421],{"class":56,"line":75},[54,422,177],{"emptyLinePlaceholder":176},[54,424,425],{"class":56,"line":81},[54,426,427],{},"   1110  \u002F\u002F (14 decimal)\n",[54,429,430],{"class":56,"line":87},[54,431,432],{},">>       \u002F\u002F são removidos 2 bits da direita para a esquerda\n",[54,434,435],{"class":56,"line":199},[54,436,437],{}," =   11  \u002F\u002F (3 decimal)\n",[16,439,441],{"id":440},"conclusão","Conclusão",[21,443,444],{},"Dependendo da sua especialidade como programador, raramente precisará utilizar operadores bitwise, porém, ter conhecimentos sobre assuntos variados e tópicos base da programação, aumentam o seu “campo de visão” na hora de resolver problemas mais complexos.",[21,446,447],{},"Espero que este artigo tenha te ajudado de alguma maneira.",[21,449,450],{},"Até a próxima ;)",[21,452,453,454,461],{},"Encontrou algum erro e\u002Fou quer contribuir com este artigo? Você pode submeter uma PR no seu ",[455,456,460],"a",{"href":457,"rel":458},"https:\u002F\u002Fgithub.com\u002Fdanilopinotti\u002Fblog-posts\u002Fblob\u002Fmaster\u002F2021-03-13-explicando_operadores_bitwise.md",[459],"nofollow","código fonte (Github)","  :)",[463,464,465],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":49,"searchDepth":63,"depth":63,"links":467},[468,469,470,477],{"id":18,"depth":63,"text":19},{"id":102,"depth":63,"text":103},{"id":133,"depth":63,"text":134,"children":471},[472,473,474,475,476],{"id":147,"depth":69,"text":148},{"id":211,"depth":69,"text":212},{"id":265,"depth":69,"text":266},{"id":318,"depth":69,"text":319},{"id":385,"depth":69,"text":386},{"id":440,"depth":63,"text":441},"md",null,"bitwise, operações bitwise, bitwise 101, getting started bitwise",{},"\u002Farticles\u002Fexplicando_operadores_bitwise","2021-03-13T21:00:00",{"title":5,"description":99},"articles\u002Fexplicando_operadores_bitwise","bitwise, conceitos","VJvbTTv0nzlC4AX_n1m7mOMoL4wrY1E_MrrT_voNwpw",[489,493],{"title":490,"path":491,"stem":492,"children":-1},"Dicas para aprender novas tecnologias","\u002Farticles\u002Fdicas_para_aprender_novas_tecnologias","articles\u002Fdicas_para_aprender_novas_tecnologias",{"title":494,"path":495,"stem":496,"children":-1},"How to easily browse through frequent folders","\u002Farticles\u002Fhow_to_easily_browse_through_frequent_folders","articles\u002Fhow_to_easily_browse_through_frequent_folders",1775139777844]