2009-03-15 12 views

Odpowiedz

12

Bitwise AND. W takim przypadku sprawdź, czy ustawiono ostatni bit w i. Jeśli tak, to musi to być liczba nieparzysta, ponieważ ostatni bit reprezentuje 1, a wszystkie inne bity oznaczają liczby parzyste.

2

Oznacza to, czy ostatni bit jest włączony (co czyni go nieparzystym). Zauważ, że nie jest to specjalnie linq, możesz to zrobić na sql lub C# code.

4

"&" to bitwise and operator. & 'ing with 1 eliminuje wszystkie inne cyfry binarne, pozostawiając 0, jeśli liczba jest parzysta, 1 jeśli jest nieparzysta.

To jest sposób na zrobienie tego hakerowi. Matematyk mógłby oczywiście napisać ((i% 2) == 1) zamiast, używając modulo 2 arithmetic! Podczas gdy inżynier oprogramowania napisałby! IsEven (i), ponowne użycie funkcji bibliotecznej i ponowne wykorzystanie punktów ciastek ... :-)

Teraz, czy którykolwiek z nich jest bardziej wydajny, zależy od kompilatora i CLR - i w tym przypadku, także na temat tego, kto ma do czynienia z drzewem wyrażeń LINQ i z czym ten odbiorca jest przygotowany.

+0

Uważam, że & operacja byłaby najbardziej wydajna pod względem technicznym. –

+0

Nie bądź zbyt pewny. Kompilator i wykonawca IL JIT ma większy stopień swobody, niż można sobie wyobrazić ... –

+0

Inżynier oprogramowania, który lubił używać metod rozszerzających do jasnego i zwięzłego C#, mógł napisać i.IsNotEven(). –

4

& to bitowy operator AND, który jest jedną z podstawowych operacji w systemie binarnym.

AND oznacza "jeśli A i B są włączone". Przykładem świata rzeczywistego są dwa przełączniki w szeregu. Prąd przepłynie tylko wtedy, gdy obydwa dopuszczą prąd.

W komputerze nie są to fizyczne przełączniki, ale półprzewodniki, a ich funkcjonalność nazywa się logic gates. Robią to samo, co przełączniki - reagują na prąd lub brak prądu.

Po zastosowaniu do liczb całkowitych każdy bit w jednej liczbie jest łączony z każdym bitem w innym numerze. Aby zrozumieć operator bitowy ORAZ, musisz przekonwertować liczby na binarne, a następnie wykonać operację AND na każdej parze pasujących bitów.

Dlatego:

00011011 (odd number) 
AND 
00000001 (& 1) 
== 
00000001 (results in 1) 

Zważywszy

00011010 (even number) 
AND 
00000001 (& 1) 
== 
00000000 (results in 0) 

The (& 1) działanie porównuje się zatem do najbardziej po prawej bitu na 1 przy użyciu i logiki. Wszystkie inne bity są skutecznie ignorowane, ponieważ wszystko I nic nie jest niczym.

Jest to równoważne sprawdzeniu, czy liczba jest liczbą nieparzystą (wszystkie liczby nieparzyste mają wartość najbardziej zbliżoną do 1).

Powyższe zostało dostosowane z podobnej odpowiedzi, którą napisałem do this question.