Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Qargwic
1 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 17
1

Двоичное представление double

15.02.2015, 19:05. Просмотров 1656. Ответов 9
Метки нет (Все метки)

Есть программа, которая переводит число DOUBLE в двоичный код по стандарту IEEE 754, но выводит его в обратном порядке. Почему?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
union LDC {
    double     ld;
    char   uc[sizeof( ld )];
};
 
void print_bin( LDC ldc )
{
    unsigned char c;
    int i, j;
        for ( i = 0; i < sizeof( ldc ); ++i ) {
        c = ldc.uc[i];
        for ( j = 0; j < 8; ++j ) {
            cout << (c & 1);
            c >>= 1;
        }
        cout<<" ";
    }
}
int main()
{
    LDC ldc;
    ldc.ld = 15.375;
    print_bin( ldc );
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2015, 19:05
Ответы с готовыми решениями:

Двоичное представление
Народ! Помогите пожалуйста! Каким образом работает эта функция? void...

двоичное представление
пользователь вводит с клавиатуры 2 беззнаковых длинных целых числа a, b....

Двоичное представление символов
Проблема такая: я прогаю скремблер, и проблема в том, что буквы при переводе...

Двоичное представление числа
Введите целое положительное N и выведите его двоичное представление. Ниже...

Двоичное представление типов данных
Всем привет. Не могли бы вы мне помочь пожалуйста с такой задачей на С++:...

9
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
15.02.2015, 19:19 2
Так байты в памяти хранятся. Цикл наоборот сделай.
0
Qargwic
1 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 17
15.02.2015, 19:31  [ТС] 3
Мне нужно вывести число так, как оно храниться в памяти, так что если оно хранится именно в таком виде, то все в порядке. Но все же, есть какой-нибудь адекватный ответ, почему оно хранится именно так?
0
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
15.02.2015, 19:45 4
Особенность архитектуры. Байты хранятся от младшего к старшему в сторону возрастания адресов. Но представляются наоборот, так что цикл надо развернуть.
Можешь взять double и long long в union, потом создать bitset<64> и вывести. Биты будут в правильном порядке, только без пробелов.
0
Qargwic
1 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 17
15.02.2015, 20:11  [ТС] 5
Сделал так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void print_bin( LDC ldc )
{
    unsigned char c;
    int i, j;
    
    for ( i = sizeof( ldc ) - 1; i >= 0; --i ) {
        c = ldc.uc[i];
        for ( j = 0; j < 8; ++j ) {
            if (c & (128>>j)) cout<<"1"; else cout<<"0";
            //c >>= 1;
        }
        cout<<" ";
    }
    
}
0
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
15.02.2015, 20:15 6
Только внешний цикл. Внутри байта всё нормально.
0
ValeryS
Модератор
7316 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,851
15.02.2015, 20:17 7
Цитата Сообщение от Qargwic Посмотреть сообщение
for ( j = 0; j < 8; ++j ) {
if (c & (128>>j)) cout<<"1"; else cout<<"0";
C++
1
2
for(unsigned int j=128;j!=0;j/=2)
           cout<<(int)((c&j)!=0);
1
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
15.02.2015, 20:18 8
C++
1
2
3
4
5
6
7
8
9
10
11
union LDC {
    double     ld;
    unsigned long long uc;
};
 
int main()
{
    LDC ldc;
    ldc.ld = 15.375;
    cout << std::bitset<64>(ldc.uc) << std::endl;
}
1
Qargwic
1 / 1 / 0
Регистрация: 02.11.2013
Сообщений: 17
16.02.2015, 17:40  [ТС] 9
Только внешний цикл. Внутри байта всё нормально.
В том то и дело, что внутри байта тоже выводится наоборот.
0
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
16.02.2015, 18:13 10
А, ну да, верно.
0
16.02.2015, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2015, 18:13

Двоичное представление области памяти
Здравствуйте. В одной из лабораторных работ требуется взять готовые функции из...

Двоичное представление символов ASCII
например дана последовательность: 0110100001101001 где h=01101000 i=01101001...

Необходимо вывести двоичное представление числа на экран.
Собственно само задание.. Код вроде вполне правильный, но все же не работает((...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru