Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 31.10.2010, 22:22   #1 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию Двоичное исчисление

подскажите как решить:
№1 дано число в прямом коде
1) перевести в обратный код вот что получилось... вот что получилось
Код:
long a=0,b=0,c=-10100001; //с наше число   b выходной результат
b=a;
if (c<0){
 a=-c;
 for(int i=7;i>-1;i--){
  b=b+(~(long(a/pow(10,i)))+2)*pow(10,i);
  a=a-(long((a/pow(10,i)))*pow(10,i));
  }
 }
из описания википедии вроде правильно.
2) перевести то же число в дополнительный код. я так понял надо к предыдущему прибавить 1. но как это реализовать если получится например 00010111? как вообще реализовывается сумма?

числа типа long или int. хотя если есть что-то похожее на чисто бинарное представление то подскажите...

так же вопрос как реализовать такое

даны числа X Y в прямом коде. составить прогу которая выполняет арифметические операции в обратном и дополнительном кодах.
X+Y -X-Y X-Y Y-X

помогите пожалуйста или куском кода(возможно на паскале) или алгоритмом...
kreol вне форума   Ответить с цитированием

Старый 31.10.2010, 22:22
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

По содержанию ваш текст очень напоминает эти топики

Исчисление объемов памяти

Старый 31.10.2010, 22:27   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

забыл написать древний компилятор turbo c
используется c++
kreol вне форума   Ответить с цитированием
Старый 03.11.2010, 16:47   #3 (permalink)
PabloEscobar
Member
 
Аватар для PabloEscobar
 
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
По умолчанию

Чего-то я вообще ничего не понял(я правда в С++ только начинаю разбираться)?
1. А как компилятор узнает что -10100001(и причем там минус к двоичному коду?) именно (по вашему представлению) двоичное представление числа? Вы просто инициализируете переменную с копией целочисленного константного литерала. Или я не так чего-то понял?
2. b=a - вы забыли дописать a=b; и b = a + 0 * 448923;
PabloEscobar вне форума   Ответить с цитированием
Старый 03.11.2010, 17:14   #4 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

да компилятору пофиг на это я работаю в 10-ной системе счислеия но использую только 0 и 1.
2. я там перепутал. надо b=c
kreol вне форума   Ответить с цитированием
Старый 03.11.2010, 17:47   #5 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

сумму я вроде как понял как сделать
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 03.11.2010, 19:54   #6 (permalink)
PabloEscobar
Member
 
Аватар для PabloEscobar
 
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
По умолчанию

№1 дано число в прямом коде
Что вы понимаете под выражением "прямой код"?
PabloEscobar вне форума   Ответить с цитированием
Старый 04.11.2010, 01:26   #7 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

при переводе числа с например десятиричной системы методом деления мы получаем прямой код
kreol вне форума   Ответить с цитированием
Старый 04.11.2010, 01:45   #8 (permalink)
PabloEscobar
Member
 
Аватар для PabloEscobar
 
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
По умолчанию

Я так понял под выражением "прямой код" вы понимаете двоичный код. Еще вопрос: а к чему там оператор if? Вы ведь явно инициализировали переменную "с" отрицательным значением? Не проще убрать минус и оператор if?

№1 дано число в прямом коде
c=-10100001
я работаю в 10-ной системе счислеия но использую только 0 и 1
вы ломаете мой мозг

У вас дана переменная, инициализированная копией целочисленного константного литерала. То есть это не двоичное представление числа -161.
В общем вы сначала толком объясните какую задачу требуется решить.
PabloEscobar вне форума   Ответить с цитированием
Старый 04.11.2010, 02:05   #9 (permalink)
PabloEscobar
Member
 
Аватар для PabloEscobar
 
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
По умолчанию

Если вам нужно перевести число из двоичного представления в десятичное то:
Код:
#include <iostream>
#include <bitset>
#include <string>

int main ()
{
	std::string s("10101010"); //ваш "прямой код"
	std::bitset<8> b(s);
	std::cout << b.to_ulong() << std::endl;
	return 0;
}
А лучше всего потратьте (аж!)20-30 долларов на нормальную книгу и занимайтесь по ней.
PabloEscobar вне форума   Ответить с цитированием
Старый 04.11.2010, 08:36   #10 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

а есть ли bitset.h в turboc 3.0?

вроде нема(
Цитата:
У вас дана переменная, инициализированная копией целочисленного константного литерала. То есть это не двоичное представление числа -161.
почему не двоичное? - для удобства например. и при выводе пользователю например будет казаться что это самое что ни на есть двоичное представление. а то как я мудрую с типами так какая разница? там могла быть и строка. только работа с ней как по мне немного сложнее.

просто мне не известно есть ли стандартная либа для работы в двоичной системе или как называется этот тип.

а этот код на билдере 6?
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:52.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.