Дайте первые 16 и 3935, и вывод не отвечает, это дает мне число, не двоичное

#c

#c

Вопрос:

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

long long convertToBinary(int dnumber);

int main() {

    int width;
    int dnumber;
    printf("Enter Width(int bits): ");
    scanf("%d",amp;width);
    printf("nEnter Decimal NUmber: ");
    scanf("%d",amp;dnumber);

    if(width==8)
    {
        if(dnumber<=255 amp;amp; dnumber>0)
        {
            printf("nOutput - U2B(%d) = %lld",dnumber,convertToBinary(dnumber));
        }else{
            printf("You entered bigger than 8 bits");
        }
    }else if(width==16){

        if(dnumber<=65535 amp;amp; dnumber>255){
           printf("nOutput - U2B(%d) = %lld",dnumber,convertToBinary(dnumber));
        }else{
            printf("You entered lower or bigger number than 16 bits");
        }
    }
    return 0;
}

long long convertToBinary(int dnumber){

    long long binaryNumber = 0;
    int remaindr, i = 1;

    while (dnumber!=0)
    {
        remaindr = dnumber%2;
        //printf("Step %d: %d/2, Remainder = %d, Quotient = %dn", i  , dnumber, remaindr, dnumber/2);
        dnumber /= 2;
        binaryNumber  = remaindr*i;
        i *= 10;
    }
    return binaryNumber;
}
  
  • Когда я даю 8 и 255, это дает мне двоичный
  • Когда я даю 16 и 3935, это дает мне десятичное число

Почему он должен давать мне двоичное число?

Ответ №1:

i переполняется в convertToBinary

Измените тип на long long:

 long long i = 1;