Operadores bit-a-bit

Considere o trecho do programa:

i=6;

i+ i<< 6;

printf(“0x%x = %d\n”, i, i);

O que é impresso ?

e considerando este, o que é immpresso?

i^= 0xF

printf(“0x%x = %d\n”, i, i);

@lauram tudo bom?

A variavel i é do tipo inteiro? Estou considerando que sim para a resposta abaixo.

Como as operações são com operadores binários:

i=6 -> 0110

a operação i+ i<< 6; irá somar i+i e o resultado será deslocado em 6 bits para a esquerda. será necessário colocar uma atribuição, caso contrário essa linha não terá efeito, por exemplo ‘resultado=i+ i<< 6;’

Continuando…

  • Somando i+i
    i+i = 12 -> 000000001100

  • Deslocando em 6 bits
    12 << 6 -> 001100000000

001100000000 = 768

  • printf("0x%x = %d\n", i, i); -> 0x300 = 768

  • i^= 0xF -> 001100001111

001100001111 = 783

  • printf("0x%x = %d\n", i, i); -> 0x30f = 783

Espero ter ajudado.