@Xproz
Пытаюсь постигнуть компьютерные сети

Магия int при делении на float?

Здравствуйте. Си стал изучать совсем недавно и здесь как оказалось очень много непонятной мне "магии".
#include <stdio.h>
int main()
{
	int a = 13;
	float b = 4.7;
	printf("%d", b/a); //на выходе получаем 660764199 
  printf("%d", b*a); //а здесь - -1207959552
	return 0;
}

При попытке поделить/умножить int на float (или float на int), а затем в printf вывести через символ преобразования
для целых чисел, то есть %d, программа выдает какие-то непонятные космические цифры.
Я понял, что нужно использовать %f и все будет хорошо.
Но я хочу понять, откуда эти цифры берутся? Так как по моей логике, ответ должен был просто отбросить дробную часть
и вывести округленный вариант. Так как скажем, почему если int a = 12 поделить на float b = 6, и вывести через %d получается 0, но через %f выходит 2.0? Или почему 13/4.7 получается выше упомянутое число, а не просто 2?
  • Вопрос задан
  • 1466 просмотров
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
Цифры странные берутся, когда в ячейке памяти хранится один тип, а printf ожидает увидеть другой, потому неправильно представляет его. Округлять или ещё как-нибудь преобразовывать типы за вас printf не будет, что ему скажут, то он и выведет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wisgest
@wisgest
Не ИТ-специалист
а затем в printf вывести через символ преобразования для целых чисел, то есть %d

Это не символ преобразования, ничего не преобразуется: вы сами сообщаете (обманываете) printf о типе переданных данных.
Преобразование выполняется как-то так
printf("%d", (int)(b*a));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы