Моя цель состоит в том, чтобы иметь десятичный код, который имеет одни и те же ведущие в двоичном формате, как указывает пользователь, который хранится в переменной unsigned long
mask
; остальные биты будут установлены на ноль.Невозможно преобразовать двоичный код в десятичный
int mask;
scanf("%d",&mask);
unsigned long subnetMask = 0;
int counter = 31,a;
for(int a = mask, a > 0; a--) {
subnetMask += pow(2,counter);
counter--;
}
printf("%ld",subnetMask);
Теперь, когда пользователь в 24, двоичная строка для маски 11111111 11111111 11111111 00000000, и я пытаюсь преобразовать его в базу 10.
Вместо того, чтобы дать мне правильный вывод из 4294967040 он дает мне -128. Я знаю, что в некоторых частях есть переполнение памяти, но я не могу понять, где. Я пробовал несколько вещей, таких как замена subnetMask
данных с int
и long
.
% d для целых чисел со знаком. try 'printf ("% lu ", subnetMask);' – bruceg
Обратите внимание, что вы никогда не используете 'mask' после считывания значения из ввода. – kaylum
% lu исправлена проблема. И условие цикла изменилось, и теперь оно работает. Спасибо, парень. – dave