Создать двумерный битовый массив целых чисел от 0 до N - PullRequest
0 голосов
/ 17 мая 2019

Обычно я пытаюсь записать двоичное представление всех чисел от 0 до N в массиве целых чисел.

Например: предположим, N = 7, мне нужно 3 бита при макс. Я хочу сделать массив, который выглядит так:

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1 

Я попробовал это, что является модификацией кода из этого ответа на вопрос ( C - Преобразовать целое число в двоичный массив ):

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

void int_to_bin_digitvector(unsigned int in, int count, int** out)
{
    unsigned int mask = 1U << (count-1);
    for (int j = 0; j < in; j++)
    {
        for (int i = 0; i < count; i++)
        {
            out[j][i] = (j & mask) ? 1 : 0;
            j <<= 1;
        }
    }

}

int main(int argc, char* argv[])
{
    int num;
    if (argc == 1)
        num = 40;
    else
        num = atoi(argv[1]);

    int (*digit)[8] = malloc(num*sizeof(*digit));

    int_to_bin_digitvector(num, 8, digit);

    for (int j = 0; j < num; j++)
    {
        for (int i= 0; i < 8; i++ )
        {
            printf("%d\t",digit[j][i]);
        }
        printf("\n");
    }

    free(digit);
    return 0;
}

Это, похоже, не работает, я новичок в C. Я думаю, что-то, создаваемый мной массив не интерпретируется должным образом для подачи в функцию, которая создает массив.

...