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] Operadores um pouco

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


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

    [Tutorial] Operadores um pouco Empty [Tutorial] Operadores um pouco

    Mensagem por Weslley_Script Sex 12 maio 2023 - 11:29

    Olá, neste tutorial vou ensinar como funciona os operadores bit a bit [Tutorial] Operadores um pouco Razz

    1є Para que servem?
    Operadores "bitwise", аs vezes traduzidos como "bit-a-bit", servem pra fazer óperas com bits. Enquanto operadores lógicos avaliam cada lado da operação apenas como verdadeiro ou falso, as operações bit-a-bit geram um valor numérico entre os dois lados da operação.


    2є O que é um pouco?
    Um bit é a unidade mais pequena que pode ser representada num computador, um bit sу pode conter dois valores, 0 (zero) ou 1 (um). Os bits podem ser agrupados, sendo que, 8 bits correspondem a 1byte, 1024 bytes equivalem a 1 kilobyte, 1024 kilobytes representam 1 Megabyte,


    etc.
    Bruno da Silva já fez um tutorial sobre ele bem explicado, que explica sobre binários também, mas qualquer dúvida pode perguntar aqui se quiser.



    4є Operador OR (|)
    O operador OR "|" compare dois valores usando suas representações binárias, para uma expressão ser verdadeira pelo menos um dos bits tem que ser 1, então a expressão é será falsa caso os dois bits sejam iguais a 0. Vejam a tabela da verdade e gravem essas regras para este

    operador :
    Код:

    Código:
    ABA|B
    1 1 1
    1 0 1
    0 1 1
    0 0 0


    http://pt.wikipedia.org/wiki/Tabela_verdade

    Como pode ver o operador OR só retorna falso caso os dois bits sejam 0.
    Resultados aqui no peão:
    PHP como:

    Código:
    printf("%d", 1 | 1); // = 1
    printf("%d", 0 | 1); // = 1
    printf("%d", 1 | 0); // = 1
    printf("%d", 0 | 0); // = 0 

    Mesmo no tуpico do Bruno ensinando pode ter pessoas que ficaram com dъvidas entгo vou explicar de novo aqui...
    E se o os nъmeros usados ​​forem diferentes de 1 e 0? Como 8 e 5?
    PHP como:

    Código:
    printf("%d", 8 | 5); 

    Simples [Tutorial] Operadores um pouco Mrgreen, basta pegar o valor binário de 8 e 5, então vamos lá.
    Код:

    Código:
    8 -> 1000
    5 -> 0101


    Agora sу usar a regra da tabela da verdade e fazer a checagem dos bits.
    Код:

    Código:
    8 5 8|5
    1 0 1
    0 1 1
    0 0 0
    0 1 1


    Resultado: 1101
    Agora o operador transforma os números binários em decimal que é igual a 13 .
    Então 8|5 = 13 .

    Espero que tenha entendido sobre o OR.
    Os operadores um pouco basicamente vão mudar a regra!


    5є Operador XOR(^)
    Como dito acima os operadores fazem basicamente a mesma função, o que muda é a regra de cada um.
    O operador XOR representado pelo ^ (acento circunflexo) compara dois valores binários exatamente como o OR, AND e outros.
    A diferença é na regra, para uma expressão ser positiva somente UM dos bits tem que ser 1.
    "A conjunção é verdadeira se, e somente se, apenas um dos operandos for verdadeiro". Está escrito no site da tabela da verdade. Lembrando que isso serve para o operador XOR!

    Regra:
    Код:

    Código:
    ABA^B
    1 1 0
    1 0 1
    0 1 1
    0 0 0


    Resultados sem peão:
    PHP como:

    Código:
    printf("%d", 1 ^ 1); // = 0
    printf("%d", 0 ^ 1); // = 1
    printf("%d", 1 ^ 0); // = 1
    printf("%d", 0 ^ 0); // = 0 

    Vou ensinar mais uma vez como fazer quando os valores forem diferentes de 1 e 0, como no exemplo 11 e 7;
    Por exemplo:
    PHP como:

    Código:
    printf("%d", 11^7); 

    O operador vai transformar esses valores em binrios, faz a checagem bit a bit e retorna o valor inteiro.
    Então vamos lá:
    Код:

    Código:
    11 -> 1011
    7 -> 0111


    Agora basta aplicar a regra do operador XOR
    Код:

    Código:
    11 7 11^7
    1 0 1
    0 1 1
    1 1 0
    1 1 0


    Resultado: 1100
    Agora o operador converte o 1100 para inteiro que é o mesmo que 12 .

    Então 11^7 = 12 .

    Viu como é simples? [Tutorial] Operadores um pouco Mrgreen


    6є Agora vamos entrar em uma parte um pouco mais complicada... vamos falar dos turnos das operadoras (<< e >>).

    7є O que são os operadores de Turnos?
    O operador Shift desloca N bits à esquerda ou direita dependendo se for utilizado Shift Left(<<) ou Shift Right(>>). Devido à rapidez, são muitas vezes usadas no programa como multiplicador ou divisor como substituição dos operadores "*" e "/".



    O operador Shift Left desloca à esquerda N bits. Pode-se entender o shift left como uma multiplicação por 2 elevado a N. É de enfatizar que um número elevado a 0 é igual a 1, logo, o shift left de 0 equivale a multiplicação por 1.

    Resultado de testes no peão usando números binrios para melhor entendimento:
    PHP como:

    Código:
    printf("%b", 1011 << 1); // = 0110
    printf("%b", 1011 << 2); // = 1100
    printf("%b", 1011 << 3); // = 1000
    printf("%b", 1011 << 4); // = 0000 

    *Obs: Estou usando %b para retornar valores binários, se você faz o teste verá que irá retornar um valor muito maior, mas NESTE caso basta pegar os ъltimos quatro nъmeros
    Resumindo, ele empurra os bits e vai adicionando um 0.

    Agora vamos usar valores decimais sem peão:
    PHP como:

    Código:
    printf("%d", 5 << 1); // = 10
    printf("%d", 5 << 2); // = 20
    printf("%d", 5 << 3); // = 40
    printf("%d", 5 << 4); // = 80
    printf("%d", 5 << 5); // = 160 

    Acho que deu pra perceber que ele multiplica o 5 por 2 N vezes. Exemplo:
    5 << 1 = 5*2 = 10
    5 << 2 = 5*2*2 = 20
    5 << 3 = 5*2*2*2 = 40
    5 << 4 = 5*2*2*2 *2 = 80
    5 << 5 = 5*2*2*2*2*2 = 160

    O mesmo serve para outros valores por exemplo:
    10 << 3 = 10*2*2*2 = 80 Você

    deve estar se perguntando , mas pra que eu vou usar isso? [Tutorial] Operadores um pouco Mrgreen
    Os turnos das operadoras são muito rápidos , mais rápidos que os operadores de multiplicação e divisão "*" e "/", por isso sempre que podem é bom usá-los. Tem esse exemplo também no tutorial de otimização do Bruno da Silva:
    Citar:

    Postado originalmente por ipsBruno
    Caso você esteja usando:
    PHP como:

    Código:
    floatpower(2, 40); 
    [size]

    é muito mais otimizado você usar
    PHP como:

    [/size]
    Código:
    1 << 40 
    Espero que tenha entendido!


    9є Shift Right(Deslocamento de bits à direita)
    Como você viu o Shift Left pode-se entender como uma multiplicação por 2 elevado a N, já o Shift Right é ao contrário, ao invйs dele multiplicar ele faz a divisão por 2 elevado a N

    Resultado dos testes no peão usando binários :
    PHP como:

    Código:
    printf("%b", 1010 >> 1);// = 0101
    printf("%b", 1010 >> 2);// = 0010
    printf("%b", 1010 >> 3);// = 0001
    printf("%b", 1010 >> 4);// = 0000 

    Peguei exemplo de um site para vocês entenderem melhor!
    PHP como:

    Código:
    new a = 10101011;
    a >> 0 = 10101011;
    a >> 1 = 01010101;
    a >> 2 = 00101010;
    a >> 3 = 00010101;
    a >> 4 = 00001010;
    a >> 5 = 00000101;
    (...) 

    Agora olhem os testículos com números decimais:
    PHP como:

    Código:
    printf("%d", 60 >> 1); // = 30
    printf("%d", 60 >> 2); // = 15
    printf("%d", 60 >> 3); // = 7
    printf("%d", 60 >> 4); // = 3
    printf("%d", 60 >> 5); // = 1 

    Entendendo:
    60 >> 1 = 60/2
    60 >> 2 = 60/2/2
    60 >> 3 = 60/2/2/2
    E assim por diante... [Tutorial] Operadores um pouco Razz


    10є Diferença entre >> e >>>
    Pelo o que eu andei lendo um nгo diferenteй muito masй fundamental.

    Se você tem esse valor abaixo que é -10 convertido em binário por exemplo:
    PHP como:

    Código:
    11110110// -10 

    e você deseja usar deslocar os bits dele então você vai lá e faz:
    PHP como:

    Código:
    11110110 >> 1 

    O resultado vai ser 01111011 que ao abrir de ser -5 é 123 , porque o operador >> não preenche a esquerda com o bit do sinal, ele sempre vai preencher com 0 .

    Agora se você fez:
    PHP como:

    Código:
    11110110 >>> 1 

    O resultado vai ser 11111011 que é igual a -5 , como pode ver ele preencheru a esquerda com 1 que era o bit antigo e não o 0 como faz o >>.


    11º Complemento para dois (binários negativos)
    Falando com o Stewie' no MSN, ele me explicou sobre transformar um valor inteiro em negativo pela representação binária do mesmo.

    É simples. Explicação: tenho o nъmero 10 , interativo em binário ele fica 1010 , mas como o limite de dados й 8 bits(1 byte) completamos o valor, ficando: 00001010 . Agora para descobrir o negativo invertemos os valores.

    Positivo : 00001010
    Negativo: 11110101


    Assim temos o -10 [Tutorial] Operadores um pouco Smile
    Créditos dessa parte ao Stewie' por ter me explicado [Tutorial] Operadores um pouco Smile

    Creditos: Bruno Pereira
    Sei que ficou grande mas tentei deixar o mais explicado possível, pode haver erros por que comecei a estudar sobre os operadores ontem a noite. Então qualquer erro me avisem por favor.

    Abraços!



    [Tutorial] Operadores um pouco D07Xwqb
    [Tutorial] Operadores um pouco Yjab9HN

      Data/hora atual: Qua 8 maio 2024 - 10:45