Deslocamento de inteiros à direita. Se seu computador usa inteiros de 2 bytes, modifique o programa da Figura 10.7 de modo que ele funcione com inteiros de 2 bytes.
Passo 1
Beleza meus bacanos? Espero que estejam bem e dispostos a estudar hoje, reajam!!!!
Neste exercício, é explicado como o deslocamento para a esquerda de um valor int sem sinal é equivalente a multiplicá-lo por 22.
Usaremos essa informação em uma função chamada power2() que recebe dois argumentos inteiros e retorna o resultado do seguinte cálculo:
A função displayBits()
Esta função usa o operador de deslocamento à esquerda
Primeiro, ele inicializa a variável mask int para 11 e, em seguida, desloca seus bits para a esquerda 3131 posições. O valor da máscara em bits é 10000000\space00000000\space00000000\space0000000010000000 00000000 00000000 00000000. Como podemos ver, o bit mais à esquerda é 11.
Mais tarde no loop for, o bit a bit AND & é usado para verificar se o bit mais à esquerda do valor x é 11 ou 00. Depois de exibir esse bit, o valor x é deslocado à esquerda para um lugar, para mover para próximo bit.
Passo 2
void displayBits(int x)
{
int mask = 1
for (int i = 1; i
printf("%c", x & mask ? '1' : '0');
x
if (i % 8 == 0)
printf("%c", ' ');
}
}
A função power2()
Multiplicar um inteiro por 22 é igual a deslocar seu bit para a esquerda para um lugar. Se quisermos multiplicar o valor do número por 22 seis vezes, por exemplo, podemos multiplicá-lo por 22 elevado a 66.
Outra maneira de fazer isso na linguagem C é deslocar os bits do número para a esquerda em seis casas.
Para generalizar, a função retornará o valor de number com seus bits shifter à esquerda para posições de pow.
int power2(int number, int pow)
{
return number
}
Passo 3
Na função main(), solicitaremos ao usuário que insira os valores para number e pow.
Vamos exibir o valor inserido para o número como um inteiro e em bits.
Em seguida, passaremos esses valores para a função power2() e o resultado será exibido como um inteiro e em bits, para que possamos ver a diferença.
int main()
{
int num, pow;
printf("number >> ");
scanf("%d", &num);
printf("pow >> ");
scanf("%d", &pow);
printf("\n%-4d - ", num);
displayBits(num);
printf("\n");
int result = power2(num, pow);
printf("\n%-4d - ", result);
displayBits(result);
}
Resposta
Ver o desenvolvimento