31.10.2010, 22:22 | #1 (permalink) |
Member
Регистрация: 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 помогите пожалуйста или куском кода(возможно на паскале) или алгоритмом... |
31.10.2010, 22:22 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
По содержанию ваш текст очень напоминает эти топики Исчисление объемов памяти |
03.11.2010, 16:47 | #3 (permalink) |
Member
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
|
Чего-то я вообще ничего не понял(я правда в С++ только начинаю разбираться)?
1. А как компилятор узнает что -10100001(и причем там минус к двоичному коду?) именно (по вашему представлению) двоичное представление числа? Вы просто инициализируете переменную с копией целочисленного константного литерала. Или я не так чего-то понял? 2. b=a - вы забыли дописать a=b; и b = a + 0 * 448923; |
03.11.2010, 17:47 | #5 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
сумму я вроде как понял как сделать
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
04.11.2010, 01:45 | #8 (permalink) |
Member
Регистрация: 24.07.2010
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 87
|
Я так понял под выражением "прямой код" вы понимаете двоичный код. Еще вопрос: а к чему там оператор if? Вы ведь явно инициализировали переменную "с" отрицательным значением? Не проще убрать минус и оператор if?
№1 дано число в прямом коде c=-10100001 я работаю в 10-ной системе счислеия но использую только 0 и 1 вы ломаете мой мозг У вас дана переменная, инициализированная копией целочисленного константного литерала. То есть это не двоичное представление числа -161. В общем вы сначала толком объясните какую задачу требуется решить. |
04.11.2010, 02:05 | #9 (permalink) |
Member
Регистрация: 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; } |
04.11.2010, 08:36 | #10 (permalink) | |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
а есть ли bitset.h в turboc 3.0?
вроде нема( Цитата:
просто мне не известно есть ли стандартная либа для работы в двоичной системе или как называется этот тип. а этот код на билдере 6? |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|