Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
#1

int/int != float? Why not? - C++

14.10.2013, 20:20. Просмотров 588. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток!

Объясните пожалуйста, почему результатом этих операций является целочисленное значение. Ведь должно получиться же 1.333333...

C++
1
2
3
4
5
float a;
int b, c;
b = 1;
c = 3;
a = b / c;
Я занимаюсь изучением С++ по книге "С++ для чайников" Книга довольно стара (2003 год) и приходится переделывать почти каждый исходник. Эта книга написана очень понятным языком, за что мне и нравится. Посоветуйте книгу для новичка, в которой очень подробно описывается каждый аспект языка C++.

P.S. Прошу прощения за столь глупый вопрос
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 20:20     int/int != float? Why not?
Посмотрите здесь:

C++ char[] в int, float.
C++ int или float
C++ Сannot convert ‘int (*)[10]’ to ‘int*’ for argument ‘4’ to ‘int
Преобразование int в float C++
C++ Int в Float
float double int C++
Как понять int a(int x,int y, int z)? C++
C++ Разность между int и float
Чтение int и float из файла C++
C++ Void send(int* to, int* from, int count)
Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? C++
C++ Почему при умножении разнотипных переменных (например, float и int) получается int?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
14.10.2013, 20:33     int/int != float? Why not? #2
RareScrap, попробуйте почитать вот здесь по соседству: rand
Если вопросы останутся, задавайте. )
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
14.10.2013, 20:35     int/int != float? Why not? #3
вообще должно получиться 0.3333333333...
А т.к. в при делении int на int получается int, то дробная часть отбрасывается и остаётся 0.
Хочешь чтобы был float. Делаешь так
b * 1.0 / c
или так (float)b / c
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
14.10.2013, 20:40     int/int != float? Why not? #4
SummerRain, ничего никуда не отбрасывается. Это целочисленное деление. 1 / 2 == 0 и остаток 1.
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
14.10.2013, 20:53     int/int != float? Why not? #5
Переменные b и c являются целочисленными переменными типа int. Часто бывает, что в выражениях языка С++, типы операндов отличаются. Т.е., например, в той же операции деления x/y, типы переменных x и y могут быть разными. В этом случае осуществляется так называемое автоматическое приведение типов данных, т.е. компилятор приводит операнды в выражении к одному типу. Не буду вдаваться в особенности конкретных типов и какие преобразования при этом выполняются, т.к. эта довольна обширная и отдельная для обсуждения тема.

В данном случае, в выражении b/c оба операнда имеют тип int, собственно никаких преобразований выполнять не надо, в результате будет выполняться целочисленное деление 1/3 = 0. Далее, это значение 0 типа int присваивается переменной a типа float. Здесь опять осуществляется автоматическое преобразование типов: осуществляется преобразование типа результата выражения к типу l-операнда, т.е. к типу переменной a (float). Но, по-умолчанию, компилятор отбрасывает лидирующие нули, т.е. если мы переменной a присвоим значение 1.000000 по-умолчанию в нее запишется значение 1. Существует несколько способов заставить компилятор выводить лидирующие нули, регулировать кол-во знаков после "запятой" и т.д.

Вообще, советую пользоваться отладчиком, "поиграться" с типами переменных, различными их значениями, посмотреть отладчиком, как будут изменяться типы результирующих выражений и т.д., вариантов много.

На счет книги, лично мне нравится книга С.Прата "Язык программирования С++. Лекции и упражнения". Из названия легко догадаться, что теория сопровождается решением задач. Желательно издательство поновее, например 2011 года.

Удачи.
RareScrap
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 84
14.10.2013, 20:55  [ТС]     int/int != float? Why not? #6
Большое всем спасибо! Как я сам не додумался?
Yandex
Объявления
14.10.2013, 20:55     int/int != float? Why not?
Ответ Создать тему
Опции темы

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