複製鏈接
請複製以下鏈接發送給好友

操作符

鎖定
操作符,計算機術語。
中文名
操作符
外文名
Operator

操作符基本特性

操作符語義

每個操作符都有自己的語義,具體取決於它所操作的類型。 [1] 

操作符優先級

每個操作符都有優先級。 [1] 

操作符結合性

每個操作符都有結合性。 [1]  操作符的結合性定義了操作符對操作數執行操作的順序,例如:右結合性表示該操作符對其操作數從右向左執行操作。

操作符操作符分類

指令系統的每一條指令都有一個操作符,它表示該指令應進行什麼性質的操作。不同的指令用操作符這個字段的不同編碼來表示,每一種編碼代表一種指令。組成操作符字段的位數一般取決於計算機指令系統的規模。
1.java操作符
2.c語言操作符
3.c++操作符
4.c#操作符
5.perl操作符
6.python操作符
7.javascript操作符
8.位操作符
10.作用域操作符
11.一元操作符
12.二元操作符
13.三元操作符

操作符重載操作符

以下以操作符+為例説明:
用户定義的類型,如:字符串,日期,複數,聯合體以及文件常常重載,二元操作符以實現對象的連接,附加或合併機制。但是要正確實現操作符會給設計,實現和性能帶來一定的挑戰 。
內建的 操作符有兩個類型相同的操作數,相加並返回右值 6,然後被賦值給 x。我們可以斷定內建的是一個二元的,對稱的,可交換的操作符。它產生的結果的類型與其操作數類型相同。按照這個規測,當你為某個用户定義類型重載操作符時,也應該遵循相應內建操作符的特徵。
下面我們就來分析內建操作符的特徵並嘗試模仿其相應的重載機制。
第一步:在成員函數和非成員函數之間選擇
你可以用類成員函數的方式實現二元操作符如:+、- 以及 ==,例如:class String {public: bool operator==(const String & s); // 比較 *this 和 s};
這個方法是有問題的。相對於其內建的操作符來説,重載的操作符在這裏不具有對稱性;它的兩個參數一個類型為:const String * const(這個參數是隱含的),另一個類型為:const String &。因此,一些 STL 算法和容器將無法正確處理這樣的對象。
另外一個可選方法是把重載操作符 + 定義為一個外部(extern)函數,該函數帶兩個類型相同的參數:
String operator + (const String & s1, const String s2);
這樣一來,類 String 必須將該重載操作符聲明為友元
class String{public: friend String operator+(const String& s1,const String&s2);};
第二步:返回值的兩難選擇
如前所述,內建操作符 + 返回右值,其類型與操作數相同。但是在調用者堆棧裏返回一個對象效率很低,處理大型對象時尤其如此。那麼能不能返回一個指針或引用呢?答案是不行。因為返回指針破壞參數類型與返回值類型應該相同的規則。更糟的是,鏈接多個表達式將成為不可能:
String s1,s2,s3; String res;res=s1+s2+s3; // 不可能用 String* 作為返回值
雖然有一個辦法可以定義額外的 + 操作符重載版本,但這個辦法是我們不希望用的,因為返回的指針必須指向動態分配的對象。這樣的話,如果調用者釋放(delete)返回的指針失敗,那麼將導致內存泄漏。顯然,返回 String* 不是一個好主意。
那麼返回 String& 好不好呢?返回的引用必須一定要是一個有效的 String。它避免了使用動態對象分配,該方法返回的是一個本地靜態對象的引用。靜態對象確實解決了內存泄漏問題,但這個方法的可行性仍然值得懷疑。在一個多線程應用中,兩個線程可能會併發調用 + 操作符,因此造成 String 對象的混亂。而且,因為靜態對象總是保留其調用前的狀態,所以有必要針對每次 + 操作符的調用都清除該靜態 String 對象。由此看來,在堆棧上返回結果仍然是最安全和最簡單的解決方案。

操作符SQL操作符

操作符比較操作符

相等:相等操作符在SQL語句裏比較一個值與另一個值,等號(=)表示相等。在進行相等比較時,被比較的值必須完全匹配,否則就不會返回數據。如果在相等比較過程中兩個值相等,那麼這個比較的返回值就是true,否則就是false。這個布爾值(true或false)用於決定是否返回數據。
不相等:在SQL裏表示不相等的操作符是<>(一個小於號和一個大於號)。如果兩個值不相等,條件就返回true,否則就返回false。另一種表示不相等的方式是!=,而且很多主要的SQL實現採用這種方式。
小於:<
大於:
比較操作符的組合:等號可以與小於號和大於號聯合使用。

操作符邏輯操作符

用户對SQL關鍵字而不是符號進行比較。
is null:這個操作符用於與null值進行比較。
between:操作符between用於尋找位於一個給定最大值和最小值之間的值,這個最大值和最小值是包含在內的。between是包含邊界值的,所以查詢結果裏會包含指定的最大值和最小值。
in:操作符in用於把一個值與一個指定列表進行比較,當被比較的值至少與列表中一個值相匹配時,它會返回true。使用操作符in可以得到操作符or一樣的結果,但它的速度更快。
like:操作符like利用通配符把一個值與類似的值進行比較,通配符有兩個:百分號(%);下劃線(_)。百分號代表零個、一個或多個字符;下劃線( _ )代表一個數字或字符。
exists:這個操作符用於搜索指定表裏是否存在滿足特定條件的記錄。
all:操作符all用於把一個值與另一個集合裏全部值進行比較。
any/some:操作符any用於把一個值與另一個列表裏任意值進行比較。some是any的別名,它們可以互換使用。

操作符連接操作符

如果想在SQL語句裏利用多個條件來縮小數據範圍,我們就需要組合多個條件。這正是連接操作符的功能。
and:操作符and讓我們可以在一條SQL語句的where子句裏使用多個條件。在使用and時,無論SQL語句是事務操作還是查詢,所有由and連接的條件都必須為true,SQL語句才會實際執行。
or:操作符or可以在SQL語句的where子句中連接多個條件,這時無論SQL語句是事務操作還是查詢,只要or連接的條件裏有至少一個是true,SQl語句就會執行。
注意:比較操作符和邏輯操作符都可以單獨或彼此複合使用。
提示:當SQL語句裏包含多個條件和操作符時,利用圓括號把語句按照邏輯關係進行劃分可以提高語句的可讀性。當然,不恰當地使用圓括號也會影響輸出結果。

操作符求反操作符

操作符not可以顛倒邏輯操作符的含義,它可以與其他操作符構成以下幾種形式:
not equal:不相等
not between:操作符between的求反
not in:操作符in的求反
not like:操作符like的求反
is not null:操作符is null的求反
not exists:操作符exists的求反
not unique:操作符distinct的求反

操作符算術操作符

加法(+)
減法(-)
乘法(*)
除法(/)
算術操作符可以彼此組合使用,並且遵循基本算數運算中的優先級:首先執行乘法和除法,然後是加法和減法。用户控制算術運算次序的唯一方式是使用圓括號,圓括號裏包含的表達式會被當作一個整體進行優先求值。
參考資料
  • 1.    Jhon Sharp.Visual C# 從入門到精通:清華大學出版社,2016年6月第一次印刷:428