Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » двоичное представление заданных типов

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые форумцы, помогите с такой задачкой:
Разработать программу, выдающую двоичное представление трех заданных типов с выбранными значениями., т.е. пользователь выбирает тип, а потом вводит значение(произвольное)
У меня типы  
long int
float  
char
 
с long int я уже справился
с char не знаю какую функцию применить, и как, есть вроде chr() или atoi, но разобраться не могу
а с float вообще завал
 
Аомогите пожалуйста

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 17:53 20-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А в чем проблема-то? В файл сохранить надо?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 19:00 20-10-2007
mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да нет, я всё в консоли делаю. Мне бы просто помочь с реализацией, вот этих двух типов: char и float? чтобы выводило на экран двоичный код числа введённого пользователем, в случае с char (символа)
очень надо

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 19:17 20-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вывести двоичное представление char и float? Можно пример?

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 20:23 20-10-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mothes
просто дай то, с чем справился

----------
матрица - это система. она и есть наш враг
everyone's first vi session. ^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopasdfghjkl;:xwhat

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 21:05 20-10-2007
mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
#include <cstdlib>
#include <iostream>
# include <iomanip.h>
# include <conio.h>  
# include <stdio.h>  
 
using namespace std;
 
int pr1(void); // Прототипы функций //long int
int pr2(void);
int pr3(void);//char
int pr4(void);
 
int main(int argc, char *argv[])
{
pr1();  
pr3();
pr4();
getch();  
return 0;
 
system("PAUSE");
return EXIT_SUCCESS;
}  
//предстовление данных в памяти компьютера (в двоичном виде)
int pr1() // Вывод двоичного представления целого числа без знака
{
unsigned x;
unsigned c, displayMask=1 << 15;  
cout<<"tip dannih LONG INT: \n";
cout <<"vvedite celoe chislo bez znaka ";  
cin >> x;  
cout << setw(7) << x << " = ";  
for (c=1; c<=32; c++)  
{
cout << (x & displayMask ? '1':'0');  
x<<=1;  
if (!(c%8)) cout << ' ';  
}
cout << endl;
return 0;
};
 
int pr3() //немогу сделать никак
{
unsigned x;
unsigned c, displayMask=1 << 15;  
cout<<"tip dannih CHAR: \n";
cout <<"vvedite celoe chislo bez znaka ";  
cin >> x;  
 
}
cout << endl;
return 0;
};
 
int pr4() //это тоже не получается
{
unsigned x;
unsigned c, displayMask=1 << 15;  
cout<<"tip dannih FLOAT: \n";
cout <<"vvedite celoe chislo bez znaka ";  
 
}
cout << endl;
return 0;
};

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 00:10 21-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да тут все гораздо проще:

Код:
#include <iostream>
#include <climits>
#include <cstdlib>
 
void print(const unsigned char* data, std::size_t size)
{
    for(int i = 0; i < size; ++i)
    {
        unsigned char mask = 1 << (CHAR_BIT - 1);
        while(mask)
        {
            std::cout << ((data[i] & mask) ? 1 : 0);
            mask >>= 1;
        }
        std::cout << " ";
    }
}
 
int main(int argc, char* argv[])
{
    int i = 65536;
    print(reinterpret_cast<unsigned char*>(&i), sizeof(i));
    std::cout << std::endl;
 
    double pi = 3.1415926;
    print(reinterpret_cast<unsigned char*>(&pi), sizeof(pi));
    std::cout << std::endl;
 
    char ch = '\n';
    print(reinterpret_cast<unsigned char*>(&ch), sizeof(ch));
    std::cout << std::endl;
}

 
CHAR_BIT --- число битов в байте, определена в <climits>. typeof(mask) == unsigned char, поскольку сдвиг таки арифметический, то есть захватывает знаковый бит, коего у unsigned принципиально нет. :-)

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 01:36 21-10-2007 | Исправлено: TheChampion, 01:39 21-10-2007
mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спаиб, работает, но там маленький нюанс, произвольное число должен вводить пользователь сам, т.е. есть меню
 
Выберете:
1) введите любой число типа long int
2) введите любое число типа float
3) введите любой символ типа char  
 
пользователь клацает к примеру один, а потом вводит число и ему на экран печатается как это число отображается в памяти компа в двоичном виде
 
но меню я знаю как сделать, а вот так чтобы пользователь вводил  и получал готовый результ не получается
 
спасибо за внимание, надеюсь на вашу помощь!

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 01:55 21-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да все почти также:

Код:
// Здесь код печати меню и выбора нужного пункта меню, обозначим этот пункт переменной action
switch(action)
{
  case 1:
  {
    std::cout << "Input a long int: " << std::flush;
    long int i;
    std::cin >> i;
    print(reinterpret_cast<unsigned char*>(&i), sizeof(i));
    std::cout << std::endl;
    break;
  }
  case 2:
  {
    std::cout << "Input a float: " << std::flush;
    float f;
    std::cin >> f;
    print(reinterpret_cast<unsigned char*>(&f), sizeof(f));
    std::cout << std::endl;
    break;
  }
  case 3:
  {
    std::cout << "Input a char: " << std::flush;
    char c;
    std::cin >> c;
    print(reinterpret_cast<unsigned char*>(&c), sizeof(c));
    std::cout << std::endl;
    break;
  }
  default:
    std::cout << "Invalid action" << std::endl;
}

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 13:28 21-10-2007
mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо огромное за помощь, вот щас пытаюсь теперь собрать прогу до кучи, спасиб за помощь.
И маленький вопросик, я пользуюсь компилером Dev C++4.9.9.2  
что скажете, может есть лучше или функциональней, скачал себе Visual C++ express edition с сайта microsoft.com но там какойто синтаксис непонятный, я ещё такой не встречал.  

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 15:33 21-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dev C++ вполне нормальный. Поновее и помощнее Visual C++ будет.
 
Насчет Visual C++. Подозреваю, что вы столкнулись с т. н. Managed C++. Это диалект C++ от мелкософта, заточенный под .NET. Изучать его смысла нет никакого.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 16:16 21-10-2007
mothes

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Вам за помощь! А де можно скачать вот полную версию Visual C++  
??
программу вашу я собрал и всё получилось, и поняли вы всё как раз очень правильно.  
 

Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 20:06 22-10-2007 | Исправлено: mothes, 23:34 22-10-2007
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А де можно скачать вот полную версию Visual C++??

Официально нигде. Неофициально где-нибудь в торрентах или в осле. Не качал, поэтому не знаю.
 
Думается мне, проще пойти и купить пиратский DVD.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 23:57 22-10-2007 | Исправлено: TheChampion, 23:59 22-10-2007
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » двоичное представление заданных типов


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru