2014-10-22 6 views
-2

Я пытаюсь понять состояние Условный другое заявление в C++, вот фрагмент кода, где это утверждение в (не это сокращенная версия):Что означает оператор &?

for (int i = 0; i < 8; ++i) 
    { 
     Point newCenter = center; 
     newCenter.x += oneEighth.x * (i&4 ? 0.5f : -0.5f); 
    } 

Я понимаю, что 0.5f держит если условие истинно и -0.5f в противном случае, но что означает i&4?

+0

Это побитовый оператор «и». http://en.wikipedia.org/wiki/Bitwise_operation Здесь не связан с оператором '?:' –

+0

. С какими справочными документами C++ вы консультировались, и что это вам сказал? [Вот некоторые] (http://en.cppreference.com/). – Angew

+2

Собственно, полный ответ был бы «это зависит от контекста». Он используется как унарный оператор, это «адрес». Как двоичный оператор, это действительно побитовое И. Кстати, оба результата были бы легко найдены, глядя на любую таблицу операторов в C++, найденную google. – Leeor

ответ

2

Это здесь использует две вещи, во-первых, он использует побитовое и оператор & это принимает бинарное представление двух целых чисел (i и 4) и вычисляет побитовое И обоих из них (т. е. для каждой позиции в результирующем двоичном представлении числа мы смотрим на биты в соответствующей позиции в двух аргументах и ​​устанавливаем результирующий бит в 1 тогда и только тогда, когда оба бита в аргументы 1), во-вторых, используется неявное преобразование int в bool, которое возвращает true, если целое число не равно 0.

Например, если мы имеем i=7, то внутреннее побитовое представление об этом в виде дополнения до двух будет:

/*24 0s*/ 0 0 0 0 0 1 1 1 

И дополняют представление этих двух по 4 является /*24 0s*/ 0 0 0 0 0 1 0 0 и поэтому побитовое И это /*24 0s*/ 0 0 0 0 0 1 0 0 и, как это не равно нулю, оно принудительно преобразуется в true, и поэтому выполняется условие.

В качестве альтернативы, если мы рассмотрим i=2, то есть внутреннее представление:

/*24 0s*/ 0 0 0 0 0 0 1 0 

и, таким образом побитовое И дает /*24 0s*/ 0 0 0 0 0 0 0 0 и, таким образом, условие не выполняется.

1

Оператор побитовое И. Побитовое двоичное И И делает логическое И бит в каждой позиции числа в своей двоичной форме.

Таким образом, в вашем коде, я & 4 верно, когда я это 4, 5, 6, 7, так как представление базовой 2 из 4 100. я & 4 будет справедливо, когда представление базового 2 я есть 1 в 3-й позиции (справа налево)

+0

Что «таблица выше»? – user2079303

+0

Этот список чисел - это не все возможные числа. –

+0

Да, но оператор for в сообщении предназначен для (int i = 0; i <8; ++ i), поэтому я только перечислял числа меньше 8 –

Смежные вопросы