Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2020, 19:13   #1
Константин01
Пользователь
 
Регистрация: 11.05.2019
Сообщений: 21
По умолчанию Перевод отрицательного десятичного числа в двоичное число

Здравствуйте, как известно, отрицательные десятичные числа представляются с помощью дополнения до двух.

У меня есть код, который читает с файла число и переводит положительное число в десятичное.

Код:
#include <stdio.h>


int main()
{  
   	int num;
   	int tmp;

   	int i = 0;
   	int max = 0;
   	int counter = 0;
   	int neg = 0;
   	FILE *fp1, *fp2;
 	fp1 = fopen("input.txt", "r");
   	fp2 = fopen("output.txt", "w");
   	
   	fscanf(fp1, "%d", &num);
   	if (num<0) num = (9-num + 1);

	while(i<1024)
	{
        
        tmp = num & 1;
        num >>= 1;
        i+=1;
        if (tmp == 1)
        {
        	counter += 1;
        	if (counter > max)
        		max = counter;
        }
       	else counter = 0;
    }

    printf("%d", max);
}
как изменить его, чтобы поддерживал конвертирование отрицательных чисел? другими словами, как написать функцию дополнения до двух?
Константин01 вне форума Ответить с цитированием
Старый 09.04.2020, 23:03   #2
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Ссылка: Перевод ОТРИЦАТЕЛЬНЫХ десятичных чисел в двоичные
Источник: codepad
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 10.04.2020, 11:27   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Цитата:
Сообщение от Константин01 Посмотреть сообщение
...представляются с помощью дополнения до двух.
"До двух" тут не при чём. Точнее, до 2^N, где N - разрядность слова. Т.е. если мы имеем дело, к примеру, с 8-битным словом, то -1 представится как дополнение до 2^8 = до 256, т.е. 255. А как же тогда представить 255? - спросят недалёкие. А никак. В 8-битном знаковом слове нет 255, все значения - от -128 до +127.
Алгоритм простой. Из абсолютной величины "пытаемого" числа вычитаем 1 и затем инвертируем все биты. Пример: представим число -1 в доп. коде (для простоты ограничимся 8 битами)
|-1| = 1 = 00000001 -> 00000000 -> 11111111 это правильный ответ. Попробуем то же с нулём.
00000000 -> 11111111 -> 00000000 и это тоже правильный ответ . Нуль и в прямом, и в дополнительном коде остаётся нулём.
Только не понимаю, зачем такие трюки делать программою - это делается автоматически на уровне команд процессора. Смысл имеет сделать это на бумаге в клеточку - для понимания что такое доп. код, как у нас выше. А городить огород вместо m=-n ... Не разумею...

Последний раз редактировалось digitalis; 10.04.2020 в 22:36.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод десятичного числа в двоичное Max140285 Помощь студентам 2 24.05.2017 16:37
Перевод десятичного числа в двоичное Max140285 Фриланс 5 19.05.2017 20:39
перевод отрицательного десятичного числа в восьмеричную tani455 Мультимедиа в Delphi 5 10.10.2013 15:45
C++. Перевод десятичного числа в двоичное Panterka Помощь студентам 15 12.12.2007 15:04