Обычно я пытаюсь записать двоичное представление всех чисел от 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. Я думаю, что-то, создаваемый мной массив не интерпретируется должным образом для подачи в функцию, которая создает массив.