C: получить биты целого числа - PullRequest
0 голосов
/ 08 марта 2019

У меня есть программа, которая будет принимать два 4-байтовых целых числа в качестве входных данных, и мне нужно хранить их в целочисленных массивах, например, так ...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[]) {
    int vals1[32], vals2[32];
    int num1 = atoi(argv[1]);
    int num2 = atoi(argv[2]);

    // so argv[1] might be 47 and I would want to set the values of the vals1 array to reflect that in binary form
}

Есть предложения?

1 Ответ

1 голос
/ 08 марта 2019

Первой задачей было бы преобразовать char * в int, что вы сказали, что можете.Итак, вот следующая часть, т.е. получение двоичного представления.Для получения двоичного представления любого типа данных использование Оператор сдвига является одним из лучших способов.И вы можете получить его, выполнив сдвиг для типа данных, а затем выполнив Побитовое И , то есть & с 1.Например, если n является целым числом

int n = 47;
for (int i = 0; i < 32; i++)
{
   /* It's going to print the values of bits starting from least significant. */
   printf("Bit%d = %d\r\n", i, (unsigned int)((n >> i) & 1));
}

Таким образом, используя оператор сдвига, решение вашей проблемы будет выглядеть примерно так:

void fun(int n1, int n2)
{
    int i, argv1[32], argv2[32];

    for (i = 0; i < 32; i++)
    {
        argv1[i] = ((unsigned int)n1 >> i) & 1;
        argv2[i] = ((unsigned int)n2 >> i) & 1;
    }
}

Вы должны быть осторожны с битомпорядок, т.е. какой бит хранится в каком индексе массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...