#c #binary #decimal #data-conversion
#c #двоичный #десятичное #преобразование данных
Вопрос:
Я пытаюсь найти способ, которым я могу принимать входные данные от пользователя и отображать их в массиве BinRep[] . В настоящее время эта программа работает только для положительных чисел, однако мне трудно найти способ заставить ее работать и для отрицательных чисел. Есть идеи?
int n = atoi(argv[1]);
int binRep[N];
int i;
int flippedNum;
for (i = 0; i < N; i ) {
binRep[i] = 0;
}
i = 0;
while (n > 0) {
binRep[i] = n % 2;
n = n / 2;
i ;
}
for (i = N - 1; i >= 0; i--) {
printf("%d", binRep[i]);
}
printf("n");
return 0;
}
Комментарии:
1. Вы понимаете, как числа со знаком представлены в двоичном формате, то есть дополняют два? Одним из способов было бы преобразовать положительное число в двоичное, а затем применить дополнение two, чтобы получить отрицательное представление. Похоже, вы или тот, кто написал код, возможно, уже думаете в этом направлении, на что ссылается неиспользуемая
flippedNum
переменная.2. Вы просто пытаетесь отобразить то же самое число в двоичном формате, как если бы входные данные были положительными, но с a
-
перед ним?3. нет. двоичный вывод должен быть положительной версией числа. Т.Е. -7 и 7 должны выводить одно и то же (7 в двоичном формате).
4. О, тогда это звучит так, как будто вам просто нужно добавить
n = abs(n);
. Не забудьте#include <math.h>
5. Это то, что я изначально собирался сделать, но это показалось слишком простым. вывод правильный, но у меня есть подозрительное чувство, что по какой-то причине он не пройдет GitHub autograder… В любом случае, спасибо за помощь! Я думаю, я напишу обратно, если это не разрешено.
Ответ №1:
unsigned int n = (unsigned int ) atoi( argv[1] );
unsigned int binRep[N];
должно работать
но отрицательное число будет в представлении с двумя дополнениями.
Комментарии:
1. Ввод из командной строки должен быть действительным знаком int . Вот почему у меня возникли проблемы с этим в противном случае.
2. 1.) ввод из командной строки всегда
char *
равен 2.)atoi( argv[1] )
выдаетint
3.)(unsigned int)
преобразует этот вывод вunsigned int
3. не могли бы вы объяснить мне, почему это работает? Я хочу иметь возможность полностью понять и понять это.
4. двойки дополняют Википедию , и если у вас возникли проблемы с пониманием моего комментария, я бы порекомендовал «Язык программирования C»
5. Я прочитал статью в Вики и несколько других сообщений о переполнении стека. Я все еще не до конца понимаю это, и это кажется довольно важным. В любом случае, вы можете просто дать мне краткое изложение того, почему это работает?