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

If или switch().case. Что быстрее - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переписать файл так, чтобы чередовались знаки компонент файла. http://www.cyberforum.ru/cpp-beginners/thread1223680.html
Дан файл F, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогательный...
C++ Странная перегрузка операторов (Error: ambiguous overload for 'operator[]') Что-то я туплю. Есть код: #include<string> struct test { int operator(const std::string&)const{return 0;} operator int()const{return 0;} }; int main() { test t; http://www.cyberforum.ru/cpp-beginners/thread1223655.html
C++ Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток
Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток. То, что я написал: #include <vector> #include <iostream> #include <iomanip> using namespace std;
Найти общую сумму стоимости всех перевозок и отдельно по каждому виду. C++
Помогите 2 задания зделать полчиса сижу никак зделать не могу тут легко я просто чтота вдуплить не могу 2. Общая сумма стоимости всех перевозок; 3. Сумма стоимости по каждому виду перевозок; ...
C++ Как объявить массив структур? http://www.cyberforum.ru/cpp-beginners/thread1223596.html
Как задать массив в С++? Type gostinica= record FIO:string; nomer:integer; cena: integer; kolvo: integer; itogo:integer; end; Var
C++ Программа, во время выполнения, после ввода, прекращает работу Проблема такая: Предисловие... Недавно я уже обращался сюда на форум из-за того, что с функцией randomize программа не компилировалась. Я, при помощи тех, кто мне помог, определил, как нужно было... подробнее

Показать сообщение отдельно
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
07.07.2014, 19:00
Ещё неплохой способ "we need to go deeper":

Юзаем switch-case:
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
movl    $4, -4(%rbp)      // int a = 4;
 
movl    -4(%rbp), %eax  //switch begin
cmpl    $3, %eax
je  .L3
cmpl    $4, %eax
je  .L4
cmpl    $2, %eax
jne .L2                   //switch end
 
addl    $2, -4(%rbp)     //1-й case
jmp .L2
                .L3:
addl    $3, -4(%rbp)     //2-й case
jmp .L2
                .L4:     
addl    $4, -4(%rbp)     //3-й case
nop
                .L2:
...


Юзаем if'ы:
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
movl    $4, -4(%rbp)   // int a = 4;
 
cmpl    $2, -4(%rbp)   //1-й if begin
jne .L2
addl    $2, -4(%rbp)   //1-й if end
 
                .L2:
cmpl    $3, -4(%rbp)   //2-й if begin
jne .L3
addl    $3, -4(%rbp)   //2-й if end
 
                .L3:
cmpl    $4, -4(%rbp)   //3-й if begin
jne .L4
addl    $4, -4(%rbp)   //3-й if end


Компилятор GNU GCC C++ .

Особо разницы не заметите, разве что во 1-м случае используются прыжки je, а во 2-м - jne.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru