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:

number * 2 pow

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