Как реализуется унарный минус и логическое отрицание?

Нужно сделать переменную с тремя значениями: одно нейтральное и два противоположных, которые можно инвертировать.

Придумал пока такие варианты:
Значения {-1,0,1} и операция инвертирования унарным минусом x=-x.
Значения {0,1,2} и операция инвертирования ксором x=x^255.
В каком случае инверсия будет выполняться быстрее?

Также еще нужно сделать родственную переменную, но нейтральное значение уже не нужно, достаточно два противоположных значения, которые можно инвертировать. Стоит ли делать тип bool или можно взять какую-то из вышеперечисленных структур? Какова машинная реализация операции отрицания для переменной bool? Есть ли у нее преимущества перед вышеперечисленными способами?
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 2
@sitev_ru
sitev.ru - мой блог ...
enum Type3Values {t3One, t3Two, t3Three};

class Type3 {
protected:
	Type3Values value;
public:
	Type3();
//Ваши операции
	Type3Values oper1(Type3Values v);
	Type3Values oper2(Type3Values v);
	Type3Values oper3(Type3Values v);
//Операции для bool
	... oper1(bool v);
	... oper2(bool v);
	... oper3(bool v);

};
Ответ написан
@none7
С машинной точки зрения нет особой разницы между bool,char и int, просто первые 2 в памяти обычно занимают меньше места. Также операции -x и x^255 выполняются одинаково быстро, то есть тоже никакой разницы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы