Я должен извлечь 10 полей заданной ширины из 32-разрядного целого числа.Печать битовых полей из целого числа
Например, если заданная ширина равна 2, тогда мне нужно извлечь 2 левых бита целого числа и напечатать их целочисленное значение.
Вот код, я прямо сейчас,
#include <stdio.h>
void printAnswer(int width[]);
int main(){
int width[10] = {3, 4, 4, 3, 3, 4, 4, 3, 2, 2};
printAnswer(width);
}
void printAnswer(int width[]){
unsigned int value = 0xCAFEBABE;
char mask;
int totalWidth = 0;
int L; // left
int R; // right
for (int i = 0; i < 10; i++){
L = 31 - totalWidth; // left end of width
R = L - width[i]; // right end of width
totalWidth = totalWidth + width[i];
// creating a mask to capture bits in range
mask = (1 << (L - R + 1) - 1) << totalWidth;
printf("%d ", (value & mask) >> totalWidth);
}
printf("\n");
}
Выход я получаю прямо сейчас, 0000000004, который не имеет никакого смысла для меня вообще.
Возможно, что-то не так с 'totalWidth', поскольку оно не инициализируется нолем для каждого элемента for для цикла. Не могли бы вы объяснить, что означают переменные 'totalWidth',' R', 'L' на примере? Кроме того, было бы полезно продемонстрировать пример ожидаемого результата для образца 'value' и' width'. –
Почему '31'? Конечно, вы делаете предположение о 'int'. Если вы хотите 32-разрядное целое число, используйте тип 'int32_t'. – chux