Десятичное в двоичное преобразование (8 бит) в C - PullRequest
0 голосов
/ 24 февраля 2019

Я работал над заданием, и пока это то, что я получил.

int n, c;

printf("Enter a decimal\n");
scanf_s("%d", &n);

printf("%d in binary is: ", n);

for (c = 7; c >= 0; c--)
{

    if (n >= 1)
        printf("1");
        n = n - 1;
    else (n < 1)
        printf("0");
        n = n / 2;
}

Я новичок в коде и изо всех сил пытаюсь выяснить, куда идти дальше.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Используйте битовую маску, чтобы проверить, установлен ли бит.Для создания битовой маски можно использовать сдвиг битов:

1 << 0  // shift 1 0 bits to the left: 0b00000001
1 << 1  // shift 1 0 bits to the left: 0b00000010
1 << 2  // shift 1 0 bits to the left: 0b00000100
1 << 3  // shift 1 0 bits to the left: 0b00001000
1 << 4  // shift 1 0 bits to the left: 0b00010000
1 << 5  // shift 1 0 bits to the left: 0b00100000
1 << 6  // shift 1 0 bits to the left: 0b01000000
1 << 7  // shift 1 0 bits to the left: 0b10000000

Затем вы можете использовать эти значения, чтобы проверить, установлен ли определенный бит с помощью оператора побитового и:

value & (1 << 4)  // evaluates to true if bit 5 is set.
                  // counted 1-based from the right.

Чтобы использовать это для вывода 8-битного значения:

char unsigned value = 42;  // an 8-bit value

for (int bit = 8; bit; --bit) {  // count from 8 to 1
    putchar(value & (1 << (bit - 1)) ? '1' : '0');
}
0 голосов
/ 24 февраля 2019
void printbin(unsigned char val)
{
    for(unsigned char i = 0x80; i; i >>= 1)
        printf("%c", val & i ? '1' : '0');
    printf("\n");
}
...