C formátu vstupu na binární a pak výstup

0

Otázka

Chci, aby se vstup uživatele s následující kód:

uint32_t value;
printf("value: ");
scanf("%"SCNu32, &value);

Moje otázka teď je, jak bych mohl použít na vstup uživatele (v mém případě hodnota) a pak se vrátit ji zformátovanou jako binární číslo bez smyčky ve funkci print_binary? Výstup musí být 32bits po 0b. Nemůžu použít jakýkoliv druh smyčky kdekoliv.

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

void print_binary(uint32_t value){

    printf("%d = 0b",value);
    //I want to print the variable value with a fixed length of 32 and that it is 
    //binary with the starting index of 0bBinaryValueOfNumber.
    return;
}

int main(void) {
    uint32_t value;
    printf("value: ");
    if (scanf("%"SCNu32, &value) != 1) {
        fprintf(stderr, "ERROR: While reading the 'uint32_t' value an error occurred!");
        return EXIT_FAILURE;
    }
    printf("\n");
    print_binary(value);
    printf("\n");
    return EXIT_SUCCESS;
}

Já také následující příklady:

Pokud vstup uživatele je 5, funkce by měla vrátit "5 = 0b00000000000000000000000000000101".

c formatting
2021-11-20 16:31:23
1

Nejlepší odpověď

2

Pokud nelze použít smyčky, můžete použít rekurzi:

void print_bin(uint32_t n, int digits) {
    if (digits > 1) print_bin(n >> 1, digits - 1);
    putchar('0' + (n & 1));
}

void print_binary(uint32_t value) {
    printf("%d = 0b", value);
    print_bin(value, 32);
    printf("\n");
}

Alternativní přístup pomocí tail rekurze:

void print_bin(uint32_t n, int digits) {
    putchar('0' + ((n >>-- digits) & 1));
    if (digits > 0) print_bin(n, digits);
}
2021-11-20 16:56:10

Zajímavé >>-- "operátor".
chux - Reinstate Monica

@chux-ReinstateMonica: nebezpečná: jedovatá šipka vystřelil z foukačka. Nezákonné v mnoha místech, ale ne ve Francii
chqrlie

Teď jsem přemýšlel, co nejdelší "provozovatel" v C? n -->>-- digits je 6. Hmmm.
chux - Reinstate Monica

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................