簡體   English   中英

&運營商的意義是什么?

[英]What is the meaning of the & operator?

在以下代碼中:

Expression<Func<int, bool>> isOdd = i => (i & 1) == 1;

...... (i & 1) == 1是什么意思?

按位AND 在這種情況下,檢查是否設置了i的最后一位。 如果是,則它必須是奇數,因為最后一位代表1而所有其他位代表偶數。

'&'是按位和運算符 &with with 1將消除所有其他二進制數字,如果數字為偶數,則為0,如果為奇數則為1。

這是黑客的做法。 數學家當然會使用模2算術寫((i%2)== 1)! 軟件工程師會編寫!IsEven(i),重用庫函數並獲得重用布朗尼點... :-)

現在,這些是否更有效取決於編譯器和CLR - 在這種情況下,還取決於誰來處理LINQ表達式樹,以及接收者准備處理什么。

&是一個按位AND運算符,AND是二進制系統中的基本運算之一。

AND表示'如果A和B都打開'。 現實世界的例子是兩個串聯的開關。 只有當兩者都允許電流通過時,電流才會通過。

在計算機中,這些不是物理開關而是半導體,它們的功能稱為邏輯門 它們與開關做同樣的事情 - 對電流或無電流做出反應。

當應用於整數時,一個數字中的每個位與另一個數字中的每個位組合。 因此,要理解按位運算符AND,您需要將數字轉換為二進制,然后對每對匹配位執行AND運算。

這就是為什么:

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

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

因此,(&1)操作使用AND邏輯將最右邊的位與1進行比較。 所有其他位都被有效忽略,因為任何東西都沒有任何東西。

這相當於檢查數字是否為奇數(所有奇數的最右位都等於1)。

以上內容改編自我寫給這個問題的類似答案。

那就是檢查最后一位是否打開(這使得它變為奇數)。 注意,不是專門針對linq,您可以在sql或c#代碼上執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM