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
не станет равным нулю. - Функция возвращает результат преобразования в виде десятичного числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д