SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Uma visão aprofundada dos operadores binários e binários.

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031967
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Uma visão aprofundada dos operadores binários e binários. Empty [Tutorial] Uma visão aprofundada dos operadores binários e binários.

    Mensagem por Weslley_Script Sáb 29 Abr 2023 - 6:36

    Navegação
    • Binário
      • o que é binário

      • Um olhar mais profundo sobre os bits
        • Inteiros assinados

        • Inteiros não assinados



      • operadores binários
        • E bit a bit

        • OU bit a bit

        • XOR bit a bit

        • NÃO bit a bit

        • Deslocamento de bits
          • Mudanças aritméticas
            • Deslocamento para a direita

            • Desvio à esquerda



          • Mudanças Lógicas
            • Deslocamento para a direita

            • Desvio à esquerda










    O que é binário?

    Binário é um sistema numeral que usa dois símbolos únicos para representar números. Enquanto o sistema decimal mais comum usa dez numerais (base 10), o binário usa apenas 0 e 1. Isso pode parecer inútil na vida cotidiana, mas o binário é essencial quando se trata de computadores. Computadores em seu nível mais baixo executam todos os seus cálculos manipulando o fluxo de eletricidade para indicar os estados ligado e desligado. Isso é exatamente o que é binário, apenas uma tonelada de interruptores ligados e desligados. Este é um tipo de conceito estranho para a maioria das pessoas, então vamos dar uma olhada nos sistemas decimal e binário próximos um do outro.


    Decimais (base 10)
    Código do peão:

    Código:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13


    Binário (Base 2)
    Código do peão:

    Código:
    0  //0
    1  //1
    10  //2
    11  //3
    100  // 4
    101 //5  110 //6 111 //7 1000 //8 1001 //9 1010 //10 1011 //11 1100 / /12 1101 //13










    Olhando para os dois sistemas lado a lado, você notará que eles se comportam exatamente da mesma forma. Assim que atingir o último número disponível, você deve passar para outro lugar. Esses lugares em binário são referidos como bits ( b inary dig its ) e são simplesmente potências de dois; assim como as casas no sistema decimal são potências de 10. Para provar isso, vamos dar uma olhada no número 13 na notação padrão.


    OBSERVAÇÃO: '^' é potência nesses próximos exemplos, não bit a bit exclusivo (que abordaremos mais adiante.


    Decimal (base 10)
    Código do peão:

    Código:
    13

    //que é igual a

    1  *  ( 10 ^ 1 )  +  3  *  ( 10 ^ 0 )

    //que é igual a

    10 + 3

    //que é igual a

    13


    Binário (base 2)
    Código do peão:

    Código:
    1101

    //que é igual a

    1  *  ( 2 ^ 3 )  +  1  *  ( 2 ^ 2 )  +  0  *  ( 2 ^ 1 )  +  1  *  ( 2 ^ 0 )

    //que é igual a 8 + 4 + 0 + 1 //que é igual a

    8 + 4 + 0 + 1

    //que igual

    a 13


    Podemos ver no exemplo anterior que, se um bit for definido como 0, podemos ignorá-lo e seguir em frente; afinal, qualquer coisa multiplicada por 0 será 0. O exemplo anterior foi um pouco complicado demais e era apenas eu tentando ser absolutamente claro. Quando você está convertendo de binário, tudo o que você realmente precisa se preocupar é somar as potências de todos os bits que estão ativados.

    Aqui estão 12 potências de 2 logo de cara:
    Código do peão:

    Código:
    4096 , 2048 , 1024 , 512 , 256 , 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1


    Se você não sabe nada sobre como trabalhar com poderes, isso provavelmente não faz sentido para você. Uma potência é um número multiplicado por ele mesmo x quantidade de vezes. Com essa informação em mente, a lista anterior de poderes provavelmente faz mais sentido; bem, com exceção de 1. Você pode estar curioso para saber por que 2 elevado à potência de 0 dá um resultado de 1, tudo o que posso dizer sobre isso é que simplesmente dá.
    Código do peão:

    Código:
    2 ^ 1  =  2 , 2 ^ 3  =  4 , 2 ^ 4  =  8


    Podemos ver que quando nos movemos para a direita, nosso valor anterior é multiplicado por 2; Portanto, é seguro assumir que, quando nos movemos para a esquerda, nosso novo valor é apenas o número anterior dividido por 2. Com isso em mente, você pode ver como podemos terminar com 2 elevado a zero igual a 1. Se isso não for satisfatório o suficiente, tenho certeza que você pode encontrar mais provas em ******. Tudo isso dito, vamos dar uma olhada em um exemplo final, e vamos torná-lo um pouco complicado!
    Código do peão:

    Código:
    111011001011111000  //242424



    //Lembre-se, ignore os bits que não estão ativados.


    Código:
    1  *  ( 2 ^ 17 )  =  131072

    1  *  ( 2 ^ 16 )  =  65536

    1  *  ( 2 ^ 15 )  =  32768

    1  *  ( 2 ^ 13 )  =  8192

    1  *  ( 2 ^ 12 )  =  4096

    1  *  ( 2 ^ 9)  =  512

    1  *  ( 2 ^ 7 )  =  128

    1  *  ( 2 ^ 6 )  =  64

    1  *  ( 2 ^ 5 )  =  32

    1  *  ( 2 ^ 4 )  =  16

    1  *  ( 2 ^ 3 )  =  8




    Código:
    131072 + 65536 + 32768 + 8192 + 4096 + 512+ 128 + 64 + 32 + 16 + 8
    =
    242424


    Lembre-se ao converter: a primeira potência é 0, então não cometa o erro de ver a 18ª casa como 2^18. Existem de fato 18 potências, mas isso inclui a potência de 0, então 17 é na verdade nossa potência mais alta.



    Uma visão mais profunda dos bits A

    maioria das linguagens de programação permite diferentes tipos de dados que variam na quantidade de bits que podem ser usados ​​para armazenar informações; no entanto peão é uma linguagem de 32 bits sem tipo. Isso significa que o peão sempre terá 32 bits disponíveis para armazenar informações. Então, o que acontece quando você tem muita informação? A resposta a essa pergunta está nos números inteiros assinados e não assinados.
    • Inteiros com sinal

      Você já notou que quando um inteiro em peão fica muito alto, ele se torna negativo? Esse "embrulho" é devido a você ultrapassar o valor máximo em peão que é:

      Código do peão:

      Código:
      2 ^ 31  -  1  //Power, não bit a bit exclusivo. Além disso, o -1 é porque contamos 0 (EXISTEM 2.147.483.648 valores, mas isso é com 0, então tecnicamente 2.147.483.647 é o máximo).



      //que é igual a

      2 , 147 , 483 , 647

      //que em binário é

      11111111111111111111111111111111  //31 bits- tudo ligado

      Você pode estar se perguntando por que ESSE é o valor máximo e não 2 ^ 32-1 (4.294.967.295). É aqui que os números inteiros assinados e não assinados entram em jogo. Os inteiros com sinal têm a capacidade de armazenar valores negativos, enquanto os inteiros sem sinal não. Pode parecer que estou me afastando da questão, mas garanto que não. A razão pela qual o inteiro máximo não é 2 ^ 32-1 é porque o 32º bit é usado como uma espécie de alternância para valores negativos e positivos. Isso é chamado de MSB (bit mais significativo). Se o MSB estiver ativado, o número será negativo; se estiver desligado, o número é positivo. Bem simples, certo?

      Antes de mostrar alguns valores negativos, preciso explicar como os valores negativos são representados no peão. O peão usa um sistema chamado complemento de 2 para representar valores negativos, o que basicamente significa que você inverte cada bit do seu número e adiciona 1 ao novo número para torná-lo negativo.

      Vamos dar uma olhada em alguns valores negativos enquanto esta ideia ainda está na sua cabeça:

      Código do peão:

      Código:
      11111111111111111111111111111111  //todos os 32 bits ativados

      //igual

      a - 1

      //e

      11111111111111111111111111111110

      //igual a

      - 2

      //e finalmente

      1000000000000000000000000000 0000

      //igual a

      - 2147483648


      Veja, todos os números negativos são simplesmente o número positivo original com todos os seus bits invertidos e aumentados em um. Isso fica super claro com nosso último exemplo, pois o maior inteiro POSITIVO é 2147483647.

      A partir disso, podemos ver que o intervalo de números no peão é, na verdade:

      Código do peão:

      Código:
      & #8722;2^31 a +2^31 − 1




    • Inteiros não assinados

      Não existem inteiros não assinados no peão, mas estou adicionando isso apenas para que fique equilibrado. A única diferença entre um inteiro com sinal e um inteiro sem sinal é que inteiros sem sinal não podem armazenar valores negativos; Inteiros ainda voltam, mas voltam para 0, em vez de um valor negativo.



    Operadores binários

    Os operadores binários permitem manipular bits individuais de um padrão de bits. Vamos dar uma olhada em uma lista de operadores bit a bit disponíveis.
    • Deslocamento aritmético bit a bit: >> , e <<


    • Deslocamento lógico bit a bit: >>>


    • Bitwise NOT (também conhecido como complemento): ~


    • E bit a bit: &


    • OU bit a bit: |


    • XOR bit a bit (também conhecido como ou-exclusivo): ^


    • AND bit a bit


      NOTA: Não confundir como operador AND lógico '&&'


      Um AND binário simplesmente pega o AND lógico dos bits em cada posição de um número na forma binária. Isso parece um pouco confuso, então vamos dar uma olhada em ação!

      Código do peão:

      Código:
      1100  //12
      &
       0100 //4
      =
       0100 //4 pois ambos têm "100" neles (que é 4)


      Isso foi um pouco fácil, vamos dar uma olhada em um mais difícil:

      Código do peão:

      Código:
      10111000  //184
      &
       01001000 //72
      =
       00001000 //8


      Observar os exemplos deve lhe dar uma boa ideia do que esse operador faz. Ele compara dois conjuntos de bits juntos, se ambos compartilharem um bit de 1, o resultado terá o mesmo bit ativado. Se eles não compartilharem nenhum bit, o resultado será 0.


    • OR bit a bit


      NOTA: Não confundir como operador OR lógico '||'


      OU bit a bit funciona quase exatamente da mesma forma que AND bit a bit. A única diferença entre os dois é que OR bit a bit só precisa de um dos dois padrões de bit para ter um bit ativado para que o resultado tenha o mesmo bit ativado. Vamos dar uma olhada em alguns exemplos!

      Código do peão:

      Código:
      1100  //12
       |
      0100 //4
      =
      1100  //12.


      Vamos dar uma olhada em mais um exemplo.

      Código do peão:

      Código:
      10111000  //184
       |
      01001000 //72
      =
      11111000  //248


      Eu acho que isso é bastante autoexplicativo, se qualquer um dos números tiver um bit ativado, o número resultante também terá esse bit ativado.


    • XOR bit a bit

      Este operador é um pouco semelhante ao operador OR bit a bit, mas há uma pequena diferença. Vamos ver o mesmo exemplo usado na seção OR bit a bit e ver se você consegue identificar a diferença.

      Código do peão:

      Código:
      1100  //12
      ^
       0100 //4
      =
      1000  //8.


      e finalmente:

      Código do peão:

      Código:
      10111000  //184
      ^
       01001000 //72
      =
      11110000  //240


      A única diferença entre XOR bit a bit e OR bit a bit é que, se ambos os padrões de bits tiverem o mesmo bit ativado, o resultado não terá esse bit ativado.


    • Bitwise NOT

      Este operador inverte cada bit no padrão de bit, transformando todos os 1s em 0s e vice-versa.

      Código do peão:

      Código:
      ~ 0
      =
      11111111111111111111111111111111  //-1

      //e

       ~ 100  //4
      =
      111111111111111111111111111111011  //-5



      //e


      Código:
      ~ 111111111111111111111111111111  // 2147483647 (não confundir com -1, que tem 32 bits, não 31)
      =
      1000000000000000000000000000000000  / /-2147483648 (32º bit ativado)


      Se você não entende por que os valores negativos são meio "reversos", leia a seção sobre números inteiros com sinal.


    • Deslocamento de bits

      O deslocamento de bits faz exatamente o que você imagina; ele desloca os bits em um número em uma determinada direção. Se você se lembra no início do artigo, mencionei que o PAWN possui um intervalo de memória específico (32 bits que podem ser usados ​​para armazenamento). O que acontece quando você desloca um número além desse intervalo? A resposta a esta pergunta está em qual operador de deslocamento você está usando e em qual direção está deslocando.


      NOTA: Nos exemplos a seguir, todos os números binários serão escritos por completo (todos os 32 bits) para evitar confusões.

      • Mudanças aritméticas

        • Deslocamento à direita

          Todos os bits em um número são deslocados x vezes para a direita ao usar este operador. Vamos dar uma olhada rápida em um exemplo simples.

          Código do peão:

          Código:
          000000000000000000000000000001000   //8
          >>
          2

          =

           0000000000000000000000000000000010 //2


          Você pode ver no exemplo anterior que cada bit foi movido para a direita em duas casas e dois zeros foram adicionados no lado esquerdo como preenchimento. Esses dois zeros são, na verdade, o valor do MSB (bit mais significativo) e são muito importantes quando se trata de deslocamento de inteiro com sinal. A razão pela qual o MSB é usado como preenchimento é para mantermos o sinal do número que está sendo deslocado. Vamos dar uma olhada no mesmo exemplo, exceto que vamos torná-lo negativo.

          Código do peão:

          Código:
          111111111111111111111111111111000  //-8
          >>
          2



          =


          Código:
          1111111111111111111111111111111110  //-2


          Claramente, isso se comporta exatamente da mesma forma que o exemplo anterior, exceto que os bits esquerdos usados ​​para preenchimento são uns; o que prova que o preenchimento do deslocamento aritmético à direita é o valor do MSB.

        • Deslocamento à esquerda

          Este é exatamente o oposto do operador de deslocamento aritmético à direita. Ele desloca todos os bits em um número para a esquerda x quantidade de vezes. Vejamos um exemplo.

          Código do peão:

          Código:
          000000000000000000000000000001000   //8
          <<
          2

          =

           000000000000000000000000000100000 //32


          A única diferença entre o deslocamento aritmético esquerdo e direito (além da direção do deslocamento) seria a maneira como ele lida com o preenchimento. Com o deslocamento aritmético para a direita, o preenchimento é o valor do MSB (bit mais significativo), mas com o deslocamento aritmético para a esquerda, o valor é apenas 0. Isso ocorre porque não há informações relevantes como um sinal de número para acompanhar.

          Código do peão:

          Código:
          111111111111111111111111111111000  //-8
          <<
          2

          =

          111111111111111111111111111100000  //-32


          Ver? Mesmo que o preenchimento seja sempre 0, o sinal do número ainda é mantido. A única coisa que você realmente tem que se preocupar é mudar para longe. Se você deslocar um número positivo além do número mais alto possível, ele se tornará negativo e vice-versa com valores negativos (você acabará atingindo 0).



      • Mudanças Lógicas

        • Deslocamento à direita

          Este é o inverso do deslocamento aritmético à esquerda. A melhor maneira de descrevê-lo seria um híbrido entre as duas mudanças aritméticas. Vamos dar uma olhada em ação!


          Código do peão:

          Código:
          000000000000000000000000000001000   //8
          >>>
          2

          =

           0000000000000000000000000000000010 //2


          Os bits no número 8 foram deslocados 2 vezes para a direita. Então, como isso é diferente do deslocamento aritmético para a direita? A resposta é o preenchimento. Com o deslocamento aritmético à direita, o preenchimento é o valor do MSB, mas com o deslocamento lógico à direita, o preenchimento é apenas 0 (assim como ocorre com o deslocamento aritmético à esquerda). Isso significa que não manterá o número do sinal, e nosso resultado será sempre positivo. Para provar isso, vamos deslocar um número negativo!


          Código do peão:

          Código:
          111111111111111111111111111111000  //-8
          >>>
          2

          =

           001111111111111111111111111111110 //1073741822


          Isso prova que não obteremos nenhum valor negativo ao usar o deslocamento lógico à direita!

        • Deslocamento à esquerda

          Não há deslocamento à esquerda lógico, pois faria exatamente o mesmo que o deslocamento à esquerda aritmético. Acabei de adicionar isso para evitar qualquer tipo de confusão e também para manter a seção equilibrada.







    [Tutorial] Uma visão aprofundada dos operadores binários e binários. D07Xwqb
    [Tutorial] Uma visão aprofundada dos operadores binários e binários. Yjab9HN

      Data/hora atual: Dom 28 Abr 2024 - 4:56