// Вариант №1
if (a & 0x0800) {
r = x1+x2;
}
else r = x1-x2;
// Вариант №2
int x[2] = [x1+x2, x1-x2];
r = x[ a & 0x0800 ];
// Вариант №3
r = x1 - x2 + 2*x2*(a & 0x0800);
// Вариант №4
class baseclass {
public:
virtual int func(x1, x2);
}
class plus : public baseclass {
public:
virtual int func(x1, x2) { return x1+x2; };
}
class minus : public baseclass {
public:
virtual int func(x1, x2) { return x1-x2; };
}
baseclass* x[2];
x[0] = new minus();
x[1] = new plus();
r = x[ a & 0x0800 ] -> func(x1, x2);
/*
Это пример. На деле операции будут сложнее и с более сложными условиями.
Меня интересует, какой вариант самый лучший с точки зрения быстродействия. "Подготовительный этап" варианта №4 в оценке не учитывать, т.к. он будет выполнен всего 1 раз при запуске программы.
*/
Примечание:
я допустил ошибку: везде нужно что-то типа (bool)a & 0x0800
или сравнение a & 0x0800 = 0x0800.
результат выражения только 0 или 1
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.