Другие языки программирования и технологии

Помогите плизз с C++

На языке С++ написать программу, которая запрашивает число (положительное, отрицательное или ноль), разрядность типа данных и его вид - знаковый или беззнаковый. На выходе программы должно быть представление заданного числа в памяти компьютера.
Прототип может быть таким (отсутствует только проверка ошибок) : вместо размера + наличия знака указывается сразу тип C++

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <map>

using namespace std;

template < class TValue >
class Representer
{
public:
void GetBinaryRepresentation(string & result, istream & stream)
{
TValue value;
stream >> value;

GetBinaryRepresentation(result, value);
}

private:
void GetBinaryRepresentation(string & result, const TValue & value)
{
ostringstream stream;

const int byte_size = 8;
const int size = sizeof(value);

const unsigned char * bytes = reinterpret_cast< const unsigned char * >(&value);
for (int i = 0; i < size; i++)
{
const unsigned char mask = static_cast< unsigned char > (1);
for (int j = 0; j < byte_size; j++)
stream << ((bytes[ i ] >> j) & mask);
}

string stream_value = stream.str();
reverse(stream_value.begin(), stream_value.end());
result = stream_value;
}
};

struct IParser
{
virtual void Parse(string & representation, istream & stream) = 0;
virtual void Register(map< string, IParser * > & parsers) = 0;
};

template < class TValue >
class Parser : public IParser
{
private:
string _key;
Representer< TValue > _representer;

public:
Parser(const string & key)
: _key(key)
{
}

void Register(map< string, IParser * > & parsers)
{
parsers[_key] = this;
}

void Parse(string & representation, istream & stream)
{
_representer.GetBinaryRepresentation(representation, stream);
}
};

void main()
{
IParser * parsers[] =
{
new Parser< int >("int"),
new Parser< unsigned char >("unsigned char"),
new Parser< unsigned int >("unsigned int"),
};

const int parsers_count = _countof(parsers);

map< string, IParser * > parsers_map;
for (int i = 0; i < parsers_count; i++)
parsers[ i ]->Register(parsers_map);

string value_type;
cout << "Enter value type: ";
getline(cin, value_type);

IParser * parser = parsers_map[ value_type ];
cout << "Enter a value: ";

string representation;
parser->Parse(representation, cin);

cout << "Binary representation is: " << representation << endl;

for (int i = 0; i < parsers_count; i++)
delete parsers[ i ];
}
ВК
Владислав Кияткин
9 617
Лучший ответ
Я пока посижу в контактике, а задроты с ответов мэил. ру пусть пишут за меня программу.
И ведь нет бы, написала какая среда разработки, написала что у неё получилось. Нет, привыкли всё нахаляву.

Олег, ты мудак или кто? Оракл - это СУБД, а С++ -это ЯП. Ламерок.
Коля Ватов
Коля Ватов
1 047
разрешите приступить к выполнению?
есть!
забей на С юзай оракул
В пмяти компьютера всё хранится в виде 1 и 0. Тебе нужно всего лишь перевести твоё число в двоичную систему исчисления и ещ не забудь приписать к началу знаковый бит. 0 - это положительное число, а 1 - это отрицательное ( и то это при условии что ты не переводишь отрицательное число в ДК)

Например если у тебя тип данных short( размер - 16 бит) , тогда:

123 = 0000 0000 0111 1011
-123 = 1000 0000 0111 1011