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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> побайтный вывод значения типа double в 2сс 
V
    Опции темы
Avaj
Дата 16.10.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



В книге одного небезызвестного автора обнаружил такой пример побайтного вывода значения типа double  в двоичном представлении:
Код

union bits{        //класс - объединение
    bits(double n){d = n;};
    void show_bits();
    double d;    //подозрительная переменная
    unsigned char c[sizeof(double)];
};

void bits::show_bits(){
    int i, j;
    for(j = sizeof(double) - 1;j >= 0;j--){     //тут считается двоичное представление
        cout<<"byte "<<j<<" : ";
        for(i = 128;i;i >>= 1){
            if(i & c[j]) cout<< '1';
                else cout<< '0';
            cout<<endl;
        }
    }
}

int _tmain(int argc, _TCHAR* argv[]){
    bits ob(1991.829);//  каким образом 1991.829 использауется в методе show_bits()?
    ob.show_bits();
    cin.get();
    cin.get();
    return 0;
}



И вот что непонятно - как переменная d используется в методе show_bits()? ведь выводится побайтно именно её значение, а как? Ведь в методе show_bits() переменная d нигде не упоминается! Т.е. если поменять значение с 1991.829 на другое, то и результат работы программы будет другой!

Это сообщение отредактировал(а) Avaj - 16.10.2008, 12:37
PM MAIL   Вверх
bsa
Дата 16.10.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Avaj, почитай книжку по Си или С++, в частности про union.
PM   Вверх
mes
Дата 16.10.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Avaj @  16.10.2008,  12:36 Найти цитируемый пост)
union bits{

всe поля структуры типа union используют/разделяют одну и ту же область памяти - размер такой структуры равена размеру наибольшого элеммента/поля. 
в таком случае когда мы используем  d,то общаемся с этой памятью как будто она типа double,
а когда используем c, то эта же память разматривается как типа char[]


Это сообщение отредактировал(а) mes - 16.10.2008, 12:47


--------------------
PM MAIL WWW   Вверх
Avaj
Дата 16.10.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



Ну да, я совсем забыл что хранится всё в одном месте. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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