Ir para conteúdo
Fórum Script Brasil
  • 0

Deslocalmento de bits


ffbarcelos

Pergunta

Olá pessoal,

Gostaria que alguém pudesse explicar esse trecho de código abaixo, pois estou com dúvidas no trecho j= 1 << 7 e v <<= 1;

#include <stdio.h>
int main(int argc, char* argv[]) {
    int v= 17, j= 1 << 7, i;
    for( i= 0; i < 8; i++) {
          putchar(v & j ?  '1' : '0');
          v <<= 1;
    }
}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

A dúvida é sobre o operador em si?

Os operador << e >> servem para deslocar bits (trabalham em binário). Por exemplo, 1 << 7 é calculado como:

0000.0001 << 7
0000.0010 << 6
0000.0100 << 5
0000.1000 << 4
0001.0000 << 3
0010.0000 << 2
0100.0000 << 1
1000.0000

Como um deslocamento à esquerda equivale mais ou menos a multiplicar por dois (lembre-se que estamos trabalhando em binário), é possível escrever 2 elevado a 7 como 1 << 7 (128).

Já os operadores <<= e >>= são semelhantes aos +=, -=, *= etc. Ou seja, var <<= 10 é equivalentel a var = var << 10. Sendo assim, escrever v <<= 1 é mais ou menos como escrever v *= 2.

Poste aí se conseguiu entender ou não.

Link para o comentário
Compartilhar em outros sites

  • 0

Seu esclarecimento me ajudou bastante, mas ainda tenho uma dúvida:

Fazendo o teste de mesa:

i v j

0 17 128

1 34 128

2 68 128

3 136 128

4 272 128

5 544 128

6 1088 128

7 2176 128

A resposta sei que é 00010001, mas o q não entendi é quando acontece 136 & 128 e 2176 & 128 serem verdadeiro, Por que é verdadeiro?. putchar(v & j ? '1' : '0');

Obrigadooo!

Link para o comentário
Compartilhar em outros sites

  • 0

O operador & (and bit a bit) funciona de forma semelhante ao operador && (and lógico), mas ele trabalha com todos os bits do número. Se dois bits de mesma posição forem verdadeiros (1), o bit do novo número será 1; do contrário, o bit será falso (0).

Por exemplo, 1001.0101 & 1100.1011 vira 1000.0001.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...