| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Вывод вещественного числа |
| Автор: alnight 19.10.2013, 16:26 | ||
| Всем привет. Возник вопрос относительно вывода числа в С. Вопрос из разряда не "как сделать", а "почему работает именно так". Скажите, почему
выводит ноль? Если после запятой другая цифра - тоже самое. Я, конечно, понимаю, что слева целочисленный тип ожидается, а справа вещественный, но разве не должно идти просто отбрасывание дробной части? |
| Автор: vinter 19.10.2013, 17:36 | ||
Так что при неправильном использовании строки формата исполняемая среда умывает руки. |
| Автор: Silent 19.10.2013, 17:54 | ||||
| Потому что это C++ Для процедуры printf параметры передаются по стеку, float как float, int как int. Соответственно, если мы кладем float (вспомним про представление дробных чисел с их мантиссами и экспонентами), а говорим print'у забирать как int - то и получаем то что видим. Приведение типов он сам делать не будет. Еще пример:
делайте без выстрелов себе в ногу:
|
| Автор: alnight 19.10.2013, 19:15 |
| Да, но ведь 11.22 в экспоненциальной форме 1.122Е+1. Откуда же получается -536870912 (или 0x2000 0000)? Мантисса-то 0x01. |
| Автор: feodorv 19.10.2013, 19:34 |
В двоичной системе? |
| Автор: borisbn 20.10.2013, 00:54 | ||
ну тогда уж
Добавлено @ 00:56 ждёмс нашего истеричного друга (как-то там o2...и другие буквы-цифры), чтобы он сказал как нам нужно правильно жить ))) Добавлено @ 00:57 Кстати, прошу прощения за оффтоп, но почему ему ещё до сих пор не организовали "баню" (и не на пару дней, а навсегда) ? Он кому-то платит, что-ли ? |
| Автор: feodorv 20.10.2013, 02:34 |
Ну зачем так сразу. Он пишет с нового форума, а там ещё подходящий функционал не реализован... |
| Автор: alnight 21.10.2013, 23:07 | ||
А в двоичной 11.22 это 1011.0011 Но я все равно не понимаю, откуда берется то число, которое программа выводит. Она же его откуда-то берет? |
| Автор: feodorv 22.10.2013, 01:58 | ||
Как намекнул volatile: а для %d считываются только 4 байта из этих восьми от double. Можно считать всё:
|