Вот шаги:
кажется проверкой .project файла в исходном репозитории. Я предложил бы не регистрироваться в .project файле, таким образом, у пользователей может быть своя собственная версия файла. Кроме того, при использовании subclipse плагина, он позволяет Вам проверять и настраивать исходную папку как проект Java. Этот процесс создает корректный .project для Вас (с природой Java),
Одиночный & - это «побитовый оператор И», как сказано в dove . Я смотрю на вторую часть вопроса: «Почему это работает?»
Думайте в двоичном формате:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
and so on
Обратите внимание, что все четные числа заканчиваются на 0;
Здесь :
Унарный
& оператор
возвращает адрес своего операнда (требуетсянебезопасный
контекст).Двоичный
& операторы
предопределены для целочисленных типов и bool. Для целочисленных типов&
вычисляет логическое побитовоеИ
своих операндов. Для операндов типа bool&
вычисляет логическоеИ
своих операндов; то есть результат будет истинным тогда и только тогда, когда оба его операнда истинны.
& operator
оценивает оба оператора независимо от значения первого.
Для логических типов вы упомянули, как они себя ведут.
Для целочисленных типов это побитовый оператор «И».
Может быть перегружен для других типов.
Предыдущие ответы верны, но не касаются того, чем &
отличается от &&
, который, как я думал, был вашим исходным вопросом, поэтому я возьму что.
Как было сказано, &
- это побитовое И. &&
- это логическое И. &
выполняет операцию И над своими операндами побитно, и в целом действует точно так же, как +
или *
или любой арифметический оператор. &&
более сложный. Он сравнивает каждый из своих операндов с нулем. Если первый операнд равен нулю, он принимает значение false
и замыкает остальную часть выражения, то есть не оценивает оставшиеся операнды. Если первое значение не равно нулю, проверяется второе значение. Если это ноль, он принимает значение false
, в противном случае принимает значение true
. В любом случае он продолжает вычислять выражение.
То есть между &
и &&
есть два важных различия:
&
работает побитно. в то время как &&
рассматривает только ноль и ненулевое значение и всегда возвращает либо 0, либо 1. Таким образом 5 и 6
(двоичные 101 и 110
) дают 4 (двоичные 100
), а 5 && 6
дает 1 ( истина
).
&&
«короткие замыкания». Если первое значение равно нулю, второе значение не оценивается. &
не имеет такого правила. Это важно по нескольким причинам:
&
эти побочные эффекты всегда возникают, а с &&
- нет. Таким образом, x & (y ++)
всегда будет увеличивать y
, а x && (y ++)
будет увеличивать только y
, если x
не равно нулю. Это становится более важным - и, возможно, более тонким - если второй операнд является вызовом функции. x! = NULL && x-> foo == 3
. С и
, когда x
равно null
, это может привести к сбоям сегмента или аналогичному. x! = 'A' && readTonsOfStuffFromDatabaseAndCalculateTotal (x)
. С &
чтение будет происходить независимо и, возможно, будет пустой тратой времени. Вот почему мы почти всегда используем &&
для вещей, которые действительно являются логическими операциями, и ограничиваем использование и
, когда нам действительно нужна побитовая операция. Но бывают случаи, когда вы НЕ хотите, чтобы произошло короткое замыкание, и в этом случае и
могут быть хорошим выбором. Но если вы используете его для «логической» работы, будьте очень осторожны с операндами, которые могут иметь любые значения, кроме 0 или 1. 1 && 2
равно true
, но ] 1 & 2
является ложным
.
и
тем, когда мы действительно хотим побитовой операции. Но бывают случаи, когда вы НЕ хотите, чтобы произошло короткое замыкание, и в этом случае и
могут быть хорошим выбором. Но если вы используете его для «логической» работы, будьте очень осторожны с операндами, которые могут иметь любые значения, кроме 0 или 1. 1 && 2
равно true
, но ] 1 & 2
является ложным
. для вещей, которые на самом деле являются логическими операциями, и ограничивают использование и
тем, когда мы действительно хотим побитовой операции. Но бывают случаи, когда вы НЕ хотите, чтобы произошло короткое замыкание, и в этом случае и
могут быть хорошим выбором. Но если вы используете его для «логической» работы, будьте очень осторожны с операндами, которые могут иметь любые значения, кроме 0 или 1. 1 && 2
равно true
, но ] 1 & 2
является ложным
. Амперсанд представляет собой побитовую операцию И. Поразрядный оператор возвращает результат сравнения между каждым соответствующим битом в двух операндах.
Например, если x равен 0110, а y равен 1010, то побитовое И для x и y (x & y) дает 0010.