2012-12-21 23 views
10

Co znajduje się krótki, elegancki, bitowe sposób zapisu ostatniej linii tego kodu C# bez pisania b dwukrotnie:Zaneguj wartość logiczną opartą na innym logiczna

bool getAsIs = .... 
bool b = .... 

getAsIs ? b : !b 
+0

Zastanawiam się, dlaczego chcesz zrobić coś takiego? Tylko z powodu dwukrotnego napisania 'b'? Wydajność? Nie sądzę, żeby którykolwiek z nich był głęboki. – nemo

+0

Dla zwięzłość/czytelność i być może wydajność, ponieważ uzyskanie "b" w moim przypadku faktycznie obejmuje dereferencję trzy właściwości. – HappyNomad

+1

Jestem prawie pewny, że VM/kompilator zoptymalizuje to w jakikolwiek sposób (dereferencje, jak również instrukcje), ale byłoby interesujące, gdyby udowodniono, że jest źle. I bit twiddling z pewnością nie daje żadnych korzyści dla czytelności: D – nemo

Odpowiedz

24

tabela prawda może być wyrażona jako:

getAsIs b getAsIs ? b : !b 
-------------------------------- 
0   0 1 
0   1 0 
1   0 0 
1   1 1 

Wynik może być wyrażony jako:

result = (getAsIs == b); 
+0

+1: tak proste, jak to możliwe – horgh

+1

+1 dla tabeli prawdy i najprostsza odpowiedź – HappyNomad

+0

W rzeczywistości mogę zmienić mój problem w zakresie tej odpowiedzi. To znaczy, mogę zmienić nazwę "getAsIs" na "targetValue". – HappyNomad

3

myślę, że to

var foo = !(getAsIs^b) 

Krótki, elegancki, ale na pewno głowy scratcher !

Powiązane problemy