Страница 1 из 1

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 21:24
Игорь Столяров
Привет всем !

Вопрос для тех кто знает C++ (я его боюсь с его указателями на массив указателей и т.д.)

Сколько в C++ будет:
DWORD dwBmpWidth = ((94 + 31) / 32) * 4 = ???

В Clarion получается 15 и это неправильно.
В C++ дробные разряды в промежуточном итоге отбрасываются, если результат целочисленный ?
Т.е эквивалент в Clarion будет Int((94 + 31) / 32) * 4 ?

Заранее спасибо ! :)

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 21:47
Дед Пахом
12

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 21:50
Игорь Столяров
Спасибо ! Значит все-таки в C++ дробные разряды в промежуточном итоге отбрасываются.
MSDN задрал. Все на C++. :(

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 23:06
Shur
Игорь Столяров писал(а): В Clarion получается 15 и это неправильно.
А что правильного в C++, если
DWORD dwBmpWidth = ((94 + 31) * 4) / 32
даст скорее всего другой результат, не говоря уже о (4 / 32) * (94 +31).

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 23:13
Дед Пахом
причём здесь C++? В целочисленной арифметике (x * y) / z <> (x / z) * y

Целочисленная арифметика в C++

Добавлено: 28 Март 2016, 23:17
Игорь Столяров
В одном фильме радистка, когда рожала - орала на русском.
Программист на Clarion тоже думает на том языке, что пишет. ;)

Целочисленная арифметика в C++

Добавлено: 29 Март 2016, 0:38
Shur
Игорь Столяров писал(а): Программист на Clarion тоже думает на том языке, что пишет.
И в этом нет никакой ошибки, я думаю.

Теперь по существу. В целочисленной арифметике, вообще говоря, используются следующие операции: +, -, *, mod, div.
Так что правильно было бы записать формулу как ((94 + 31) div 32) * 4.
Ну и напишите это грамотно на Кларионе, тогда он даст вам ожидаемый вами результат.
Правильной формулой действительно будет Int((94 + 31) / 32) * 4.