Программирование на C - преобразование целого числа в двоичное - PullRequest
4 голосов
/ 03 февраля 2010

Надеюсь, после некоторых советов, которые были против решений, так как это домашнее задание, и я хочу решить это сам

Во-первых, я очень плохо знаком с C. На самом деле, я никогда не делал ничего раньше, хотя у меня есть опыт работы с Java в университетах.

Я пытаюсь написать программу, которая преобразует одно целое число в двоичное. Мне разрешено использовать только побитовые операции и не использовать библиотечные функции

Может кто-нибудь предложить некоторые идеи о том, как я буду делать это. Очевидно, я не хочу код или что-то еще, только некоторые идеи относительно того, какие пути исследовать как актуальные, я немного растерялся и не имею плана атаки. Хорошо, сделайте это очень запутанным: D

большое спасибо

Ответы [ 6 ]

6 голосов
/ 03 февраля 2010

Подумайте о том, что вы можете делать с побитовыми операторами.

Например, вы можете проверить, равен ли бит 1 или 0 следующим образом:

int bit = value & 1;

Вы также можете сдвигать биты вint вроде этого:

val = val >> 1;

Для проверки i-го бита в int вы можете сделать следующее:

int bit = (value >> i) & 1;

Надеюсь, этого достаточно, чтобы начать работу.

3 голосов
/ 03 февраля 2010

Разрывай его по кусочкам.Используйте сдвиг.Обработка более одного бита за раз может быть выполнена с помощью справочной таблицы.

0 голосов
/ 11 ноября 2015

Одно решение для нахождения целого числа в двоичном виде следующее: использование битового смещения

int DintoB(int num){
int a=31;  enter code here`//as 32 bit number int.

while (a>=0){
    int n=num>>a;//bit shifting
    if(!(n%2))printf("0");
    else printf("1");
    a--;
}
printf("\n");
}
0 голосов
/ 15 марта 2010

Я полагаю, что вы должны сделать домашнее задание, так что вот мое решение. :)

Я только сейчас пытался написать конвертер ascii-to-binary + binary-ascii в C, по совпадению. Двоичный файл для ascii был довольно прост с функцией strtol () и всем, и мой код для преобразования символа (который фактически является int), был следующим:

void chartobinf(int c, FILE* out)
{
  size_t n = 8*sizeof(unsigned char);
  while (n-- > 0)
    fputs(((c >> n) & 1) ? "1" : "0", out);
}

Это печатает символ (изменяет параметр и размер типов в соответствии с вашими потребностями) в правильном порядке (который, на мой взгляд, является наибольшим значением в первую очередь), в отличие от многих других решений.

Мне особенно нравится это решение, потому что оно очень короткое. С другой стороны, он не сохраняет значение в виде строки или чего-либо подобного.

Редактировать: Я думаю, можно также заменить вызов fputs() на

fputc(((c >> n) & 1) ? '1' : '0', out);

Может быть микросекунды быстрее? Незнайка.

0 голосов
/ 03 февраля 2010

Возможно, вы захотите запомнить, как вручную преобразовывать числа в двоичные представления. Возможно, это не самый эффективный способ сделать это, но он кажется более естественным, чем просто играть с переключающимися операторами.

Чтобы преобразовать число в двоичное представление, вы в основном смотрите, какие 2 ^ i части вписываются в это число, и строите свое двоичное число на основе этого.

0 голосов
/ 03 февраля 2010

Вы можете сохранить вывод в массиве символов

char output[33]; // for 32 bit integers, plus a null terminator if you need one
output[n] = '1';

или вы можете «сохранить» вывод на экране

printf("1");

хотя это можно утверждать как использование библиотеки функций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...