Змінюй хід війни! Допомагай ЗСУ!

Забыл простое в С+ ыыы

  • Автор теми Автор теми inferno_99
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 28.01.2009
Повідом.: 176
Забыл простое в С++ ыыы

Забыл как можо получить целое от деления? Тоесть 32/10=3
 
Останнє редагування:
int a = 32/10;

double c = (int)(32/10);
 
убери капсовое Ыыыы из заголовка, я то не придирчивый, но Жлобик увидет- покарает :rolleyes:
 
Легко:
int c = (a - (a % b) ) / b;
Или еще проще:
int c = (int) floor((double) a / b);
 
Чорд возьми, как я забыл об ентом способе...
 
Легко:
int c = (a - (a % b) ) / b;
Или еще проще:
int c = (int) floor((double) a / b);
Я предлагаю такой очень простой вариант:

Код:
int a = 32;
int b = 10;
int c = 0;

for (int i = INT_MIN; i < INT_MAX; ++i)
{
    if (i == a/b)
    {
        while (rand() % 1)
        {
            for (volatile int j = INT_MIN; j < INT_MAX; ++j)
            {
                // Thinking...
            }
        }

        //Every strong application shall have a window!
        CreateWindow("Button", "(_._)", 0, 1, 2, 3, 4, NULL, NULL, NULL, NULL);

        if (rand() % 5)
        {
            MessageBoxA(NULL, "That was easy!", NULL, MB_ICONINFORMATION);
        }
        else
        {
            MessageBoxA(NULL, "You are loser!", NULL, MB_ICONSTOP);
            ((int*)0) = 12345;
        }

        c = i;
    }
}
 
Останнє редагування:
static_cast<int>(a/b);
 
Ну или еще вариант :D :
Код:
32/10
 
Если операнды не int, то static_cast не помешает.
 
ТС спрашивал как целое число получить, а не остаток. Вот так:
int x=32/10;
 
Если операнды не int, то static_cast не помешает.
Та не это ****окод. Если результат инт, а операнды дабл, то еще куда не шло, статик каст нужен тока для снятия варнинга, результат будет одинаков. Да и в этом случае кастить надо операнды, с точки зрения перформанса.
А если результат тож дабл, то нужен флур.
 
Klez, смотри пост №10 ;)



Если результат инт, а операнды дабл, то еще куда не шло, статик каст нужен тока для снятия варнинга, результат будет одинаков.
Результат будет таки разный. Как ты уже сказал, в первом случае будет ворнинг, а во втором - нет ;).

Да и в этом случае кастить надо операнды, с точки зрения перформанса.
В 99% случаев нужно оптимизировать код на более высоком уровне, т.к. экономия нескольких циклов на отдельных операциях в 99% случаев не даст заметного прироста производительности. Кроме того, приведение float/double к int тоже не мгновенно происходит.

А если результат тож дабл, то нужен флур.
floor() и приведение к int - это несколько разные вещи.
Вот тебе пример:
Код:
int c = (int)(-32.0 / 10.0);
int d = (int)floor(-32.0 / 10.0);
 
Останнє редагування:
Ты такой серьезный, что мне аш страшно... Тока зачем там статик каст?

Читабельность выше. Плюс как бы не стоит привыкать к приведениям в стиле C. Плюс писать не очень комфортно, писать приведения должно быть некомфортно. Это не моя причуда в любой современной книжке написано.
 
В 99% случаев нужно оптимизировать код на более высоком уровне, т.к. экономия нескольких циклов на отдельных операциях в 99% случаев не даст заметного прироста производительности. Кроме того, приведение float/double к int тоже не мгновенно происходит.
Но все же быстрее деления даблов.

floor() и приведение к int - это несколько разные вещи.
Вот тебе пример:
Код:
int c = (int)(-32.0 / 10.0);
int d = (int)floor(-32.0 / 10.0);
Я не про этот случай, а про то, что если операнды и результат операции дабл, то нужен флур, шоб получить то что хочет ТС.

Читабельность выше.
Не влияет.
Плюс как бы не стоит привыкать к приведениям в стиле C.
Почему? Они небезопасны? Но ведь в Си и С++ много чего небезопаного, шоб все было мбезопасно надо менеджед код использовать.
QUOTE=jammer77;15373491] Плюс писать не очень комфортно, писать приведения должно быть некомфортно. Это не моя причуда в любой современной книжке написано.[/QUOTE]
Современные книжки писали ракшасы мечатющие о джаве и шарпе :)
Шутго :) На самом деле все должно быть в меру. И приведения там теоретически можно поставить только если операнды вещественные.
 
Я не про этот случай, а про то, что если операнды и результат операции дабл, то нужен флур, шоб получить то что хочет ТС.
Приведение к int и floor() работают по-разному независимо от типов операндов. Какая разница, какого типа должен быть результат операции?
"double c = int(-32.0 / 10.0)" вернет -3, а "double d = floor(-32.0 / 10.0)" вернет -4.
 
Приведение к int и floor() работают по-разному независимо от типов операндов. Какая разница, какого типа должен быть результат операции?
"double c = int(-32.0 / 10.0)" вернет -3, а "double d = floor(-32.0 / 10.0)" вернет -4.

Не угадал. Алур всегда вернеть -4. А вот что вернеть / зависит от специфики компилятора. Либо -3 либо -4:
If either operand is negative, whether the result of the operation is the largest integer less than or equal to the algebraic quotient or is the smallest integer greater than or equal to the algebraic quotient is implementation defined. (See the Microsoft Specific section below.)
 
Не угадал. Алур всегда вернеть -4. А вот что вернеть / зависит от специфики компилятора. Либо -3 либо -4:
Да ну? Покажи-ка мне компилятор под x86, который вернет -4. IDIV при делении -32 на 10 возвращает -3, и он не интересуется спецификой компилятора ;)
 
Ну вы тут и спор развели - а нужно просто чтобы слева и справа от "/" были целые числа - тогда и результат цеый =)
 
Назад
Зверху Знизу