Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,794
Записей в блоге: 4
1

Как вывести double, float в двоичной системе счисления?

03.09.2020, 01:09. Показов 6085. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для моих разработок есть нужда знать как лежит число в 2ом виде типов float double, я хотел бы посмотреть как располагаются биты, похожую тему я уже открывал но там были приведены примеры с целым числом.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2020, 01:09
Ответы с готовыми решениями:

Как вывести адрес массива в двоичной системе счисления?
Подскажите пожалуйста, как вывести адрес массива в двоичной системе счисления?

Если строка является изображением целого числа в восьмеричной системе счисления, то перевести ее в целое число в двоичной системе счисления
Вводится строка символов. Если она является изображением целого числа в восьмеричной системе счисления, то перевести ее в целое число в...

Вывести старшие 4 бита в двоичной системе счисления
Для целого числа (char) вывести его старшие 4 бита в двоичной системе счисления. Эта программа я так понимаю выводит младшие биты? А как...

14
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12862 / 6727 / 1809
Регистрация: 18.10.2014
Сообщений: 17,029
03.09.2020, 01:21 2
Цитата Сообщение от Nexi99 Посмотреть сообщение
я хотел бы посмотреть как располагаются биты,
1. Переинтерпретируйте свое число, как массив unsigned char

C++ Скопировано
1
2
float f = 3.14;
const unsigned char *p = (const unsigned char *) &f;
2. Рассматривайте биты в каждом байте p[0], p[1], ..., p[sizeof f - 1] теми же способами, которым вы это делали раньше.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,794
Записей в блоге: 4
03.09.2020, 01:25  [ТС] 3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Переинтерпретируйте свое число, как массив unsigned char
можно конечно но так трошки рассматривать будет тяжело но наверное по другому и не сделаешь я придурок ошибку в названии темы допустил.
0
Эксперт CЭксперт С++
 Аватар для liv
5118 / 4566 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
03.09.2020, 12:31 4
Цитата Сообщение от Nexi99 Посмотреть сообщение
ошибку в названии темы допустил
Попросить-то недолго ведь... Жмем на треугольник и просим... Поправил...
0
Модератор
2130 / 999 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
03.09.2020, 15:42 5
Свежий стандарт представления чисел с плавающей точкой в ЭВМ
ANSI/IEEE Std 754-2019
https://754r.ucbtest.org/background/

Если нужно посмотреть, как выглядят числа в наиболее ходовых форматах,
можно воспользоваться многочисленными онлай- и автономными калькуляторами
https://baseconvert.com/ieee-754-floating-point
1
Злостный нарушитель
 Аватар для Verevkin
9795 / 5337 / 1212
Регистрация: 12.03.2015
Сообщений: 25,039
03.09.2020, 17:39 6
Как тебе такое, Илон Маск?
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char* void2bin(void* data, size_t size)
{
  char* dest = new char[1 + 8 * size];
  char* ptr = dest;
  uint8_t* b = (uint8_t*)(data) + size - 1;
  
  for (size_t bit = 8 * size; bit--; ptr++)
  {
    *ptr = (*b & (1 << (bit & 7))) ? '1' : '0';
    if (!(bit % 8)) b--;
  } 
  
  dest[8 * size] = 0;
  return dest;
}
Как вывести double, float в двоичной системе счисления?
1
Модератор
2130 / 999 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
03.09.2020, 20:54 7
C++ 17
Надо ещё понять, в каком порядке выводятся биты...
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// g++ fbits.c++ -std=c++17 -o d ; ./d 7.7
#include <iostream>
#include <bitset>
#include <limits>
 
template < class Data >
std::string 
to_bitstring ( const Data & any,  char O='0', char I='1')
{
    return  reinterpret_cast< const
        std::bitset<
            std::numeric_limits<unsigned char>::digits
            * sizeof any
        >&>(any) . to_string( O, I );
}
 
int main( int c, char * a[])
{
   auto number {
    1 < c 
    ?
    atof( a[1] )
    :
    3.14
    };
 
    std::cout 
        << number << '\n'
        
        << to_bitstring( number ) << '\n'
                << to_bitstring( number, '_', '^' ) << '\n'
                << to_bitstring( number, 'O', 'X') << '\n'
 
        << "BITS\n"
        << to_bitstring( "BTIS\n", '-' ) << '\n'
 
        << "std::string{} = "
        << to_bitstring( std::string{}, '.', '_') << '\n'
 
        << &main << '\n'
        << to_bitstring( &main, 'O', '-' ) << '\n'
 
        << a << '\n'
        << to_bitstring( a, '-', '|' ) << '\n'
 
        << "UB ?: \n"
        << to_bitstring( *reinterpret_cast<char(*)[20]>(&main), 'o' ) << '\n'
        ;
}
Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
7.7
0100000000011110110011001100110011001100110011001100110011001101
_^_________^^^^_^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^__^^_^
OXOOOOOOOOOXXXXOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOOXXOX
BITS
------------1-1--1-1--11-1--1--1-1-1-1---1----1-
std::string{} = .........................................__.......__...___._..._.........................................__.......__............................................................................................._____________.__.._._.._..____.__..____._......
1
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO-OOOOOOOOOO--O-OO--O--O
0x7ffd949ed0d8
-----------------|||||||||||||-||--|-|--|--||||-||-|----||-||---
UB ?: 
1ooo1oo1o1oo1ooo11111111111111111111111o1o1o11oo1o1111o11ooo1oo1ooooooooooooooooooooooo1o11o1ooo111o11oo1oooooo1o1oo1oooo1o1oo11111oo1o11ooo1oo1o1oo1oooo1o1o1o1
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12862 / 6727 / 1809
Регистрация: 18.10.2014
Сообщений: 17,029
03.09.2020, 21:03 8
Цитата Сообщение от politoto Посмотреть сообщение
C++ Скопировано
1
2
3
4
5
reinterpret_cast< const
        std::bitset<
            std::numeric_limits<unsigned char>::digits
            * sizeof any
        >&>(any)
Ну ну...

Цитата Сообщение от politoto Посмотреть сообщение
C++ 17
В С++17 с его constexpr нет никакой необходимости заниматься таким "КолянСиплый-стайл" гамнокодингом, как вышепроцитированный reinterpret_cast. Да и никогда не было...
1
Модератор
2130 / 999 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
04.09.2020, 05:38 9
Конечно, Вы правы. Для данного гамнокода должно быть вполне достаточно с++11, а, с косметическими изменениями, возмножно, и более винтажного языка.
Когда я задумывал гамнокод, я хотел проверить, что там с std::to_chars(), взглянув на https://www.cyberforum.ru/post14817954.html
Но подумал, что старый добрый std::bitset будет тоже интересен любителю поковыряться в битах.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,794
Записей в блоге: 4
05.09.2020, 22:51  [ТС] 10
Цитата Сообщение от politoto Посмотреть сообщение
Надо ещё понять, в каком порядке выводятся биты...
Да там нужно внимательно смотреть.
0
05.09.2020, 23:20 11

Не по теме:

Цитата Сообщение от politoto Посмотреть сообщение
std::to_chars()
А в каком компиляторе он реализован?

0
Модератор
2130 / 999 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
06.09.2020, 08:02 12
Avazart, Microsoft обещает в библиотеке VS 2017
https://docs.microsoft.com/en-... -functions
У меня нет под рукой Visual Studio, чтобы проверить, насколько реализация соответствует стандарту.
В библиотеке gcc 9 должен быть.
https://gcc.gnu.org/onlinedocs... s.iso.2017
__has_include(<charconv>) __cpp_lib_to_chars >= 201611
Но насколько полно сейчас реализация соответствует стандарту, тоже не знаю:
23.2.8Primitive numeric output conversionPartialOnly integer types supported, not floating-point types
Кликните здесь для просмотра всего текста

Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
main.cpp:12:33: error: call of overloaded 'to_chars(std::array<char, 100>::pointer, std::array<char, 100>::pointer, double)' is ambiguous
 
   12 |         std::chars_format::hex*/);
 
      |                                 ^
 
In file included from main.cpp:2:
 
/usr/local/include/c++/10.2.0/charconv:366:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, char, int)'
 
  366 | _GLIBCXX_TO_CHARS(char)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:367:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, signed char, int)'
 
  367 | _GLIBCXX_TO_CHARS(signed char)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:368:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, unsigned char, int)'
 
  368 | _GLIBCXX_TO_CHARS(unsigned char)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:369:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, short int, int)'
 
  369 | _GLIBCXX_TO_CHARS(signed short)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:370:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, short unsigned int, int)'
 
  370 | _GLIBCXX_TO_CHARS(unsigned short)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:371:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, int, int)'
 
  371 | _GLIBCXX_TO_CHARS(signed int)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:372:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, unsigned int, int)'
 
  372 | _GLIBCXX_TO_CHARS(unsigned int)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:373:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, long int, int)'
 
  373 | _GLIBCXX_TO_CHARS(signed long)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:374:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, long unsigned int, int)'
 
  374 | _GLIBCXX_TO_CHARS(unsigned long)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:375:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, long long int, int)'
 
  375 | _GLIBCXX_TO_CHARS(signed long long)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:376:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, long long unsigned int, int)'
 
  376 | _GLIBCXX_TO_CHARS(unsigned long long)
 
      | ^~~~~~~~~~~~~~~~~
 
/usr/local/include/c++/10.2.0/charconv:397:19: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, bool, int)' (deleted)
 
  397 |   to_chars_result to_chars(char*, char*, bool, int = 10) = delete;

Пока нет std::to_chars(), можно использовать std::printf() или std::hexfloat
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
#include <cstdint>
#include <bitset>
#include <cstring>
 
int main()
{
    
    float v {6.3125f};
    std::uint32_t bits;
    static_assert ( (sizeof v) == sizeof bits);
    std::memcpy ( &bits, &v, sizeof v );
    std::bitset<std::numeric_limits<unsigned char>::digits * sizeof bits> bitset{bits};
    
    std::printf ( "%a = %012o(8) = %8x(16)" "\n"
        "= %s", 6.3125, bits, bits, 
        bitset.to_string('o', 'X' ).c_str() 
        );
 
}
Code Скопировано
1
2
0x1.94p+2 = 010062400000(8) = 40ca0000(16)
= oXooooooXXooXoXooooooooooooooooo
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.09.2020, 11:11 13
Цитата Сообщение от politoto Посмотреть сообщение
Microsoft обещает в библиотеке VS 2017
Ну from_chars там не работает точно.
0
Модератор
2130 / 999 / 170
Регистрация: 23.07.2018
Сообщений: 3,348
Записей в блоге: 3
06.09.2020, 11:47 14
/std:c++17 работает только, начиная с VS 2019 ?
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
06.09.2020, 12:03 15
politoto, на сайте у них так написано

charconv from_chars() and to_chars() are available for integers. The timeline for floating-point from_chars() and floating-point to_chars() is as follows:
  • VS 2017 15.7: Integer from_chars() and to_chars().
  • VS 2017 15.8: Floating-point from_chars().
  • VS 2017 15.9: Floating-point to_chars() overloads for shortest decimal.
  • VS 2019 16.0: Floating-point to_chars() overloads for shortest hex and precision hex.
  • VS 2019 16.2: Floating-point to_chars() overloads for precision fixed and precision scientific.
  • VS 2019 16.4: The floating-point to_chars() overload for precision general.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2020, 12:03
Помогаю со студенческими работами здесь

Вычислить выражение и вывести результат в двоичной и в шестнадцатеричной системе счисления
Добрый вечер! Написать программу на ассемблере для решения вот такого уравнения, х и у задаем различные от 1 и 0: z=x*x-(y*y)/2+3 ...

Вывести на экран монитора вещественные числа в двоичной системе счисления
Создать типизированный файл, который содержит несколько вещественных чисел, после чего вывести на экран монитора эти вещественные числа в...

Программа должна вывести представление переданного её числа в нега-двоичной системе счисления
Нега-двоичная система счисления – это система счисления с основанием (-2). Основное преимущество нега-двоичной системы счислении –...

Проверить правильность ввода числа в двоичной системе счисления и перевести это число из двоичной системы в десятичную
Здравствуйте! Подскажите, пожалуйста, как исправить код, чтобы выполнялось задание. Делала на основе паскаля, который нашла здесь, но...

Ввести два одноразрядных положительных целых числа. Вывести на экран сумму ведённых чисел в двоичной системе счисления
Ввести с клавиатуры два одноразрядных положительных целых числа. Вывести на экран сумму ведённых чисел в двоичной системе счисления Очень...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Простая нейросеть на КуМир: Создание и обучение
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
Исполнитель Водолей в КуМир: Решение задач
EggHead 16.03.2025
Разработка алгоритмического мышления — одна из ключевых задач для начинающих программистов, и система КуМир предлагает отличный способ погрузиться в этот процесс. Среди множества исполнителей в этой. . .
Исполнитель Чертежник в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы можете рисовать на бесконечной координатной плоскости, перемещая точку, которая оставляет след. По вашей команде она может поднять перо и двигаться, не оставляя следа, или. . .
Исполнитель Робот в КуМир: Решение задач
EggHead 16.03.2025
КуМир (Комплект Учебных МИРов) — это учебная среда программирования, разработанная специально для обучения базовым концепциям алгоритмизации. Её главная фишка — использование русскоязычного. . .
Исполнитель Черепаха в КуМир: Решение задач
EggHead 16.03.2025
Представьте, что вы впервые учитесь программировать, а перед вами стоит задача заставить маленькую виртуальную черепашку рисовать на экране. Звучит забавно? Эта идея зародилась ещё в 1967 году, когда. . .
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер