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

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

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

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

14.10.2013, 20:20. Просмотров 609. Ответов 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?
Посмотрите здесь:

Почему при умножении разнотипных переменных (например, float и int) получается int? - C++
Почему при умножении разнотипных переменных (float price и int unit) получается int? Это же не преобразование типов данных. Почему...

Int в Float - C++
Доброго времени суток. у меня уже второй раз возник вопрос по поводу перевода Int в Float Sr2=(float)S2/size; тут переменная Sr2 типа...

float double int - C++
Доброй ночи, препод совсем запарил, то ему не так, то ему не эдак. // 8.2.cpp: определяет точку входа для консольного приложения. // ...

char[] в int, float. - C++
Интересует такой вопрос: Допустим у меня есть массив из char, и в этом массиве посимвольно лежат цифры (через %s), т.е: char ach;...

int или float - C++
здрасьти, p=p*6; каким должен быть тип у p? int или float? или без разницы?

Преобразование int в float - C++
Добрый день! int x = 20110511; double a = x; cout<<x<<' '<<a<<'\n'; Результат: 20110511 2.01105e+007 Число float...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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
1140 / 857 / 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 года.

Удачи.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2013, 20:55     int/int != float? Why not?
Еще ссылки по теме:

Конвертирование float/int to string - C++
Здравствуйте, я пишу программу на dev-c++ и мне надо конвертировать число в string.Я просто не знаю как это сделать в dev-c++. Помогите...

Почему float преобразуется в int? - C++
Уважаемые форумчане, помогите найти ошибку, а то у меня уже коллапс мозга. В задаче надо найти кучу всего. Все считает правильно кроме...

Разность между int и float - C++
Есть точка CV_INLINE CvPoint cvPoint( int x, int y ) { CvPoint p; p.x = x; p.y = y; return p;

LONG VS DOUBLE / INT VS FLOAT - C++
Всем доброго времени суток! Объясните пожалуйста почему при следующем коде #include <iostream> using namespace std; int main() ...

Результат преобразования int в float - C++
Доброго времени суток,пример unsigned int sande1=0,sande2=0; void TForm1::mat_tt(){ float dat=0.0; int posred=0; ...

Чтение int и float из файла - C++
Ну вот опять - печатает в конце программы что-то невообразимое. В начале всё хорошо, а потом засбоила. Может каунтер поставить? Подскажите,...


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

Или воспользуйтесь поиском по форуму:
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