Перевод отрицательных чисел в двоичную систему счисления

Почему после перевода в двоичную систему счисления вывод всё равно с минусом? Я ведь отдельно рассмотрел случай для отрицательных чисел. Для них тип данных меняется на unsigned, почему не работает то?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int num, base;
    base = 2;
    unsigned char minus = 0;
    unsigned int digits[640];
    int count;
    scanf("%d", &num);
    
    if (num < 0) {
        (unsigned int)num;
        for (count = 0; num != 0; count++) {
            digits[count] = num % base;
            num /= base;
        }
    }
    else {
        for (count = 0; num != 0; count++) {
            digits[count] = num % base;
            num /= base;
        }
    }
    
    int iter = count - 1;
    while (iter >= 0) {
        printf("%d ", digits[iter]);
        iter--;
    }
    return 0; 
}  

Ответы (1 шт):

Автор решения: EOF

Проблема в строке

(unsigned int)num;

Эта строка не изменяет тип переменной num. Она создает новое значение, которое нужно куда-то сохранить, чтобы потом использовать в вычислениях. Вот эту часть кода

if (num < 0) {
    (unsigned int)num;
    for (count = 0; num != 0; count++) {
        digits[count] = num % base;
        num /= base;
    }
}
else {
    for (count = 0; num != 0; count++) {
        digits[count] = num % base;
        num /= base;
    }
}

можно заменить на это:

unsigned int tmp = (unsigned int)num;
for (count = 0; tmp != 0; count++) {
    digits[count] = tmp % base;
    tmp /= base;
}

Для 8 получим вывод:

1 0 0 0 

Для -8 получим вывод:

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

что и есть -8 в двоичном представлении.

→ Ссылка