Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Представить как двоичное 
:(
    Опции темы
m0dest
Дата 27.2.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Подскажите пожалуйста, как представить тип long double в двоичном виде.
PM MAIL   Вверх
Fazil6
Дата 27.2.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



PM MAIL   Вверх
m0dest
Дата 27.2.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Э.. я ничего не понял. Можете как-нибудь проще объяснить, как число
из типа long double перевести в двоичное.  smile 

Для int у меня пашет такой код:

#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>

int pr1(void);

void main()
{
    pr1();
}
int pr1()
{
int x;
int c,dspMask=1<<15;

cout<<"Enter a number without sign: ";
cin>>x;
cout<<setw(7)<<x<<"=";
    
    for(c=1;c<=16;c++)
    {
    cout<<(x & dspMask?'1':'0');
    x<<=1;
    if(!(c%8)) cout<<' ';
    }

cout<<endl;

cin.get();

return 0;

}

А если меняю тип то дрова.
PM MAIL   Вверх
Rockie
Дата 27.2.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



m0dest, 

Представление плавающих значений, Cи, C++

Системы счисления, wiki



Это сообщение отредактировал(а) Rockie - 27.2.2007, 14:30


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
EvgenZ
Дата 27.2.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Код

         Qwerty(int leigh){
    mLeigh = 0;
    mZnak = 0; 
    //mNum = new char[32];
    if(leigh < 0){
        leigh = -leigh;
        mZnak = -1;
    }
    while(leigh){
        mNum[mLeigh++] = leigh & 1;
        leigh >>= 1;
    }
}


int mLeigh;
      char mNum[SIZE+1];
      int mZnak;



--------------------
<удалено администрацией форума>
PM MAIL   Вверх
m0dest
Дата 27.2.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



EvgenZ, можешь полностью код привести, пожалуйста?
PM MAIL   Вверх
EvgenZ
Дата 28.2.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Это моя лаба, вроде финальная версия ибли покрайней мере одна из последних, еще есть динамический вариант.
Код

class Qwerty{
public:
    Qwerty(): mLeigh(1){mZnak = 0; mNum[0] = 0; }
    Qwerty(int);
    Qwerty(char*);
    Qwerty(const Qwerty&);
    Qwerty(const Qwerty&, int);    
    ~Qwerty(){}
    int GetLeigh() const {return mLeigh;}
    char* GetNum() {return mNum;}
    int GetZnak(){return mZnak;} 
    Qwerty& operator++();
    Qwerty operator--(int);
    Qwerty& operator=(const Qwerty&);
    Qwerty operator~();
      friend Qwerty operator+( const Qwerty&, const Qwerty&); 
      friend std::ostream& operator<<(std::ostream&, const Qwerty&);
      friend std::istream& operator>>(std::istream&, Qwerty&);
private:
      static const int SIZE=10;
      int mLeigh;
      char mNum[SIZE+1];//char*
      int mZnak;
}; 

Qwerty::Qwerty(int leigh){
    mLeigh = 0;
    mZnak = 0; 
    //mNum = new char[32];
    if(leigh < 0){
        leigh = -leigh;
        mZnak = -1;
    }
    while(leigh){
        mNum[mLeigh++] = leigh & 1;
        leigh >>= 1;
    }
}

Qwerty::Qwerty(char* num){
    mZnak = 0;
    int i, j;
    for(i = 0; num[i] == ' ' || num[i] == '\t'; i++)
        ;
    if(num[i] == '-'){
        mZnak = -1;
        i++;
    }
    else if(num[i] == '+')
        i++;
    //while(num[i] == '0')
    //    i++;
    for(j = 0; num[i] != '\0' && i < SIZE-1 && (num[i] == '0' || num[i] == '1'); ++i)
        this->mNum[j++] = num[i] - '0';
    mLeigh = j;
    if(j == 0 ){
        this ->mLeigh = 1;
        mNum[0] = 0;
        mZnak = 0;
    }
} 

Qwerty::Qwerty(const Qwerty& rhs){
    mLeigh = rhs.mLeigh;
    mZnak = rhs.mZnak;
    int i;
    for(i = 0; i < rhs.mLeigh; ++i)
        mNum[i] = rhs.mNum[i];
}

Qwerty::Qwerty(const Qwerty& rhs, int a){
    mLeigh = a;
    int l =  rhs.mLeigh; //int l = rhs.mLeigh < a ? rhs.mLeigh : a;
    mZnak = rhs.mZnak;
    int i;
    for(i = 0; i < l; ++i)
        mNum[i] = rhs.mNum[i];
    for(; i < a; i++)
        mNum[i] = 0;
}

Qwerty& Qwerty::operator++(){
    *this = *this + (1);
    return *this;
} 

Qwerty Qwerty::operator--(int){ 
    Qwerty qwe(*this);
    *this = *this + (-1);
    return qwe; 
} 

Qwerty& Qwerty::operator=(const Qwerty& rhs){
    if(this == &rhs)
        return *this;
    mLeigh = rhs.mLeigh;
    mZnak = rhs.mZnak;
    int i;
    for(i = 0; i < rhs.mLeigh; ++i)
        mNum[i] = rhs.mNum[i];
    return *this;
} 

Qwerty operator+( const Qwerty& lhs, const Qwerty& rhs){
    int dlinna = (lhs.mLeigh < rhs.mLeigh ? rhs.mLeigh : lhs.mLeigh) + 1;
    Qwerty ch1(lhs, dlinna), ch2(rhs,dlinna);
    ch1 = ~ch1;
    ch2 = ~ch2;
    int p = 0, s;
    for(int i = 0; i < dlinna; ++i){
        s = ch1.mNum[i] + ch2.mNum[i] + p;
        ch1.mNum[i] = s%2;// s & 1
        p = s/2; // (s >> 1) & 1
    }
    p = -p;
    ch1.mZnak = (ch1.mZnak + ch2.mZnak + p) % 2;
    ch1 = ~ch1;
    for(p = dlinna - 1; p > 0 && ch1.mNum[p] == 0; --p)
        ;
    return Qwerty(ch1, p+1);
}

Qwerty Qwerty::operator~(){
    Qwerty a(*this);
    if(a.mZnak == 0)
        return a;
    int i = 0;
    while(a.mNum[i] == 0)
        ++i;    
    a.mNum[i] = 1;
    while(++i < a.mLeigh)
        a.mNum[i] = 1 - a.mNum[i];
      return a;
} 

std::ostream& operator<<(std::ostream& out, const Qwerty& obj){
    if(obj.mZnak == -1)
        out << '-';
    for(int i = obj.mLeigh - 1; i >= 0 ; --i)
        out << static_cast<int>(obj.mNum[i]);
    return out;
} 

std::istream& operator>>(std::istream& in, Qwerty& obj){
    std::cout << "vvedi kolichestvo cifr v chisle i samo chislo v 2-om kode ";
    in >> obj.mLeigh;
    in >> obj.mNum;
    return in;
}




--------------------
<удалено администрацией форума>
PM MAIL   Вверх
threef
Дата 28.2.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Код

#include <iostream>
using namespace std;

union view
{
    long double x;
    char c[sizeof(long double)];// разделяет с твоим long double одну память
};

void bytetobeat(unsigned char c)
{
    unsigned char d=0;
    while(c) // переворачиваем биты задом наперед
    {
        d+=(d<<1)+(c&1);
        c>>=1;
    }
    for(int i=0;i<8;i++,d>>=1) // потому, что выводим, начиная с последнего
    {
        cout<<(d&1);
    }
// эту функцию можно и упростить...
}
main()
{
    view a={3.0};// инициализируем обьединение 
    for(i=0;i<sizeof(long double);i++) // смотрим на long double побайтно
        bytetobeat(a.c[i]);
    cout<<'\n';
}

Попробуй такой вариант.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.