трюк с булевыми операциями - PullRequest
       7

трюк с булевыми операциями

7 голосов
/ 10 сентября 2010

Я видел это раньше в коде, но забыл это.В основном это переключает логическую переменную.Если это правда, он будет установлен в ложь и наоборот.Но, к сожалению, забыл синтаксис.

Это в основном одна строка для этого:

if (myVar) {  
    myVar = false;  
} else {  
    myVar = true;  
}  

Это что-то вроде этого, но не знаю, как это называется или правильный синтаксис этого:

myVar = myVar : false ? true;

Ответы [ 13 ]

0 голосов
/ 11 сентября 2010

Как уже отмечали другие, есть два способа отрицать что-то: "lvalue =! Lvalue;" и "lvalue ^ = 1;". Важно признать различия.

Если сказать "lvalue =! Lvalue", lvalue будет установлен на 1, если он был равен нулю, и на 0, если он был установлен на что-нибудь еще . Lvalue будет оцениваться дважды; это не является фактором для простых переменных, но выражение "someArray [index1] [index2] [index3] [index4] =! someArray [index1] [index2] [index3] [index4]" может замедлить процесс.

Сказать "lvalue ^ = 1;" приведет к тому, что для lvalue будет установлено значение 1, если оно было 0, 0, если оно было 1, и что-то еще, если оно не было ни нулевым, ни 1. Значение lvalue необходимо указывать или оценивать только один раз, а если известно, что значение равно нулю или 1, эта форма, скорее всего, будет быстрее.

Жаль, что нет оператора автоматического отрицания; бывают случаи, когда такая вещь будет полезна.

0 голосов
/ 10 сентября 2010
public boolean toggle(boolean bool)
{
  return !bool;
}
0 голосов
/ 10 сентября 2010

Существует троичный оператор ( Википедия ).Что позволяет вам написать сжатое выражение if-else, как во втором примере.

В java:

myVar = (myVar) ? true : false;

Также есть оператор NOT, который переключает логическую переменную.В Java это!Я считаю, что это то, что вы хотите.

myVar = !myVar;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...