ffbarcelos Postado Abril 24, 2010 Denunciar Share Postado Abril 24, 2010 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; } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 24, 2010 Denunciar Share Postado Abril 24, 2010 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.0000Como 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ffbarcelos Postado Abril 25, 2010 Autor Denunciar Share Postado Abril 25, 2010 Seu esclarecimento me ajudou bastante, mas ainda tenho uma dúvida:Fazendo o teste de mesa:i v j0 17 1281 34 1282 68 1283 136 1284 272 1285 544 1286 1088 1287 2176 128A 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Abril 25, 2010 Denunciar Share Postado Abril 25, 2010 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Abril 26, 2010 Denunciar Share Postado Abril 26, 2010 Pense no operador & assim:Se um número A "conter" B, a expressão vai ser interpretada como true.Sempre usando potências de 2 Veja: 3&1 -> true (3=2+1)6&4 -> true (6=4+2)12&2 -> false (12=8+2) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
ffbarcelos
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;
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.