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

В каком случае проверка условия выполняется быстрее? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Попадание точки в заданную область по координатам http://www.cyberforum.ru/cpp-beginners/thread779225.html
1)задать круг и триугольник(смотреть рискунок) 2)ввести координаты точки (x,y); 3)вывести результат (попадает точка в заданную область или нет). мне хотя б саму формулу как задать круг и треугольник
C++ Составьте программу, которая создает стек из произвольного количества элементов Здравствуйте!!! Помогите пожалуйста, не могу разобраться с программой. Составьте программу, которая создает стек из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого элемента: печать целых чисел из информационной части и остатка от деления первого целого числа на второе. http://www.cyberforum.ru/cpp-beginners/thread779221.html
C++ Ошибка на cout и cin
немогу понять в чем ошибка, есть код программы, вроде бы все правильно написано, но возможно я где-то допустил ошибку, но почему-то в упор невижу ругается на cout и cin и на "<<" ">>", может я что-то с библиотеками напутал? или что не так #include <iostream> #include <math.h> void main () { int Ax,Ay,Bx,By,d,Cx,Cy,Dx,Dy,u,xc,yc; cout << "input Ax:"; cin >> Ax; cout << "input Ay:";
что такое hex C++
Здравствуйте вообщем возник вопрос что такое hex и как он работает. У меня была простая программка BitTest - инициируются две переменные и выводится результаты выполнения операторов ~, &, | и ^. Но при написании её возникла трудность результат выводился 10 системой исчисления а я хотел 16. Долга иска в чем косяк наткнулся на похожую программку и заметил что в cout добавлено вот это <<...
C++ Программа, позволяющяя для заданного натурального пятизначного числа выполнить замену его чётных цифр на их дополнения до 9 http://www.cyberforum.ru/cpp-beginners/thread779211.html
Как написать данную программу, не используя массивы и циклы. На достаточно простом и понятном для новичка коде? К сожалению, пока они не изучены мною на достаточно высоком уровне. Заранее спасибо
C++ Вычислить рекурсивно функцию Вычислить рекурсивно функцию : S(n) 1, если n=1 S(n/2), если n=2k S((3n+1)/2),если n=2k+1 не могу понять что такое k и откуда его брать да и вообще проблемы с рекурсией подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.02.2013, 03:59     В каком случае проверка условия выполняется быстрее?
че гадать. берем студию и смотрим дизасм. вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
int f(int i)
{
    std::cout << i << std::endl;
    return 10;
}
 
int main()
{
 
    int i = 0;
 
    while (1)
    {
        ++i;
        if (i > f(i))
        {
            i = 0;
            break;
        }
    }
 
    std::cout << "##############" << std::endl;
 
    while (true)
    {
        ++i;
        if (i > f(i))
        {
            i = 0;
            break;
        }
    }
 
    return 0;
}
В дебаге:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    while (1)
00411AC5  mov         eax,1 
00411ACA  test        eax,eax 
00411ACC  je          main+53h (411AF3h) 
    {
...
 
 
 
    while (true)
00411B1E  mov         eax,1 
00411B23  test        eax,eax 
00411B25  je          main+0ACh (411B4Ch) 
    {
....
Видно что в дебаге одно и то же. не удивительно.
Теперь в релизе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    while (1)
    {
        ++i;
        if (i > f(i))
00401003  mov         eax,dword ptr [__imp_std::endl (402060h)] 
00401008  mov         ecx,dword ptr [__imp_std::cout (402054h)] 
0040100E  push        eax  
0040100F  add         esi,1 
00401012  push        esi  
00401013  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (402044h)] 
00401019  mov         ecx,eax 
0040101B  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (40203Ch)] 
00401021  cmp         esi,0Ah 
00401024  jle         main+3 (401003h)
для варианта с тру - то же самое. не силен в асме, но тут похоже вообще нет кода, выполняющего while(1),
что тоже логично. он и не особо нужен, компилятору и так понятно, что условия выхода из цилка где-то в
другом месте и тут нечего проверять.
Да и вообще такими мелочями не стоит заморачиваться. писать нужно логично и тру - тут более логичная
штука, потому как while ожидает что-то булевское.

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
вот до кучи еще для for(;;) в дебаге:
 
    for (;;)
    {
        ++i;
00411617  mov         eax,dword ptr [i] 
0041161A  add         eax,1 
0041161D  mov         dword ptr [i],eax 
        if (i > f(i))
00411620  mov         eax,dword ptr [i] 
00411623  push        eax  
00411624  call        f (411154h) 
00411629  add         esp,4 
0041162C  cmp         dword ptr [i],eax 
0041162F  jle         main+0FAh (41163Ah) 
        {
так же как и для релизного while(true)
 
Текущее время: 11:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru