Преобразование типа int в бит неверного типа - PullRequest
0 голосов
/ 20 марта 2019

Я разработал функцию для преобразования int в 32 бита.проблема в том, что я пытаюсь поместить возвращенные биты в массив типа int, но это не происходит.Должен ли я использовать массив символов.Поскольку мне нужно передавать биты в другую функцию по крупицам, мне нужно хранить их в массиве.Ниже приведен код:

 int main()
{

int x=24; // int whose 32 bits i need
int n=32; // number of bits needed
int p=0; // starting position.

int py[32]=getBits(x,p,n);
printf("\n",py);
return 0;
}


unsigned getBits(unsigned x, unsigned p, unsigned n) {
  return (x >> (p + 1 - n)) & ~(~0 << n);
 }

1 Ответ

3 голосов
/ 20 марта 2019

Здесь много неправильного, например, присвоение во время выполнения массива.

Чтобы сохранить отдельные биты 32-битного целого в элементах массива, вы можете использовать что-то следующее.

//assumes bits has been declared as unsignef char bits[32]
void get_bits32(unsigned char * bits, unsigned int x) {
    for(int i = 0; i < 32; i++)
        bits[i] = (x >> i) & 1u;
}

Вы можете изменить это, чтобы указать количество битов или длину массива следующим образом.

void get_bits32(unsigned char * bits, int n, unsigned int x) {
    for(int i = 0; i < n; i++)
        bits[i] = (x >> i) & 1u;
}

Здесь используется массив символов, так как вы ожидаете только 0 или 1 с.

Эта версия хранит младший значащий бит в позиции 0 массива.

Чтобы напечатать это, вы должны напечатать каждый элемент массива, например

for(int i = 0; i < n; i++)
    printf("%d", bits[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...