Warning: integer constant is too large for "long" type - C (СИ)
Формулировка задачи:
Можете пояснить и написать, что нужно сделать в коде, чтобы компилятор не выдавал следующие предупреждения:
warning: integer constant is too large for "long" type;
warning: comparison is always true due to limited range of data type.
Листинг программы
- #include<stdio.h>
- main (void)
- {
- long int i, l;
- printf("Vvedite dvoichnoe chsislo: ");
- scanf("%d", &i);
- if(i==0 || i==1)
- {
- l=i*1;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=10 && i<100)
- {
- l=(i%10)*1+(i-i%10)/10;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=100 && i<1000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i-i%100)/100)*4;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=1000 && i<10000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i-i%1000)/1000)*8;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=10000 && i<100000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i-i%10000)/10000)*16;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=100000 && i<1000000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i%100000-i%10000)/10000)*16+((i-i%100000)/100000)*32;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=1000000 && i<10000000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
- l=l+((i-i%1000000)/1000000)*64;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=10000000 && i<100000000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
- l=l+((i%10000000-i%1000000)/1000000)*64+((i-i%10000000)/10000000)*128;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=100000000 && i<1000000000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
- l=l+((i%10000000-i%1000000)/1000000)*64+((i%100000000-i%10000000)/10000000)*128;
- l=l+((i-i%100000000)/100000000)*256;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- if(i>=1000000000 && i<10000000000)
- {
- l=(i%10)*1+((i%100-i%10)/10)*2+((i%1000-i%100)/100)*4+((i%10000-i%1000)/1000)*8;
- l=l+((i%100000-i%10000)/10000)*16+((i%1000000-i%100000)/100000)*32;
- l=l+((i%10000000-i%1000000)/1000000)*64+((i%100000000-i%10000000)/10000000)*128;
- l=l+((i%1000000000-i%100000000)/100000000)*256+((i-i%1000000000)/1000000000)*512;
- printf("Chislo %d v desyatichnoy forme: %d\n", i, l);
- }
- printf("\n");
- return 0;
- }
Решение задачи: «Warning: integer constant is too large for "long" type»
textual
Листинг программы
- int ConvertToDecimal(int number)
- {
- int count = 0, result = 0;
- do
- {
- int mod = number % 10;
- result += pow(2, count)*mod;
- count++;
- number /= 10;
- }while(number);
- return result;
- }
Объяснение кода листинга программы
- В функции
ConvertToDecimal
приведена реализация алгоритма преобразования числа из двоичной системы счисления в десятичную. - Переменная
count
инициализируется значением 0 и используется для подсчёта количества цифр в числе, которое будет преобразовано. - Переменная
result
инициализируется значением 0 и используется для хранения результата преобразования. - В цикле
do-while
происходит последовательное преобразование каждой цифры числа в двоичную систему счисления с помощью операции остатка от деления%
и последующим добавлением полученного значения в переменнуюresult
. - Переменная
count
увеличивается на единицу после каждой итерации цикла. - Переменная
number
делится на 10 после каждой итерации цикла. - Цикл выполняется до тех пор, пока число
number
не станет равным нулю. - Функция возвращает результат преобразования в виде десятичного числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д