Eu estou acompanhando as atividades sobre macro e manipulação de bits do livro practical C. Tem uma questão de fixação que não estou conseguindo fazer.
Ela diz: "Faça um código que tenha uma função set(bool p, unsigned int a, unsigned int b, unsigned int number) que sete n bits, definido pelo intervalo a e b, com o valor de p
(0 ou 1) na variável number e o resultado jogue no retorno."
Tentei fazer o seguinte código mas não funcionou:
#include <stdio.h>
#include <stdbool.h>
#define left(number) (number = number >> 1)
#define right(number) (number = number << 1)
int set(bool p, unsigned int a, unsigned int b, unsigned int number)
{
if (p == 1)
{
for (int aux = a; aux < b; aux++)
{
number = number & 1;
left(number);
}
return number;
}
}
int main()
{
unsigned int number, a, b;
bool p;
int auxiliador;
scanf("%d", &auxiliador);
p = auxiliador;
scanf("%d", &number);
scanf("%d", &a);
scanf("%d", &b);
printf("%d", set(p, a, b, number));
}
Testes:
1
1
2
8
saída: 14
mas no código ta saindo 0. Alguém poderia me dar uma luz?