位運算子
運算子
運算
範例
<<
左移
3 << 2 = 12 --> 3*2*2=12
>>
右移
3 >> 1 = 1 --> 3/2=1
>>>
無符號右移
3 >>> 1 = 1 --> 3/2=1
&
與運算
6 & 3 = 2
|
或運算
6 | 3 = 7
^
異或運算
6 ^ 3 = 5
~
反碼
~6 = -7
左移(<<)、右移(>>)和無符號右移(>>>),符號左側是要進行操作(移位)的數,要進行移位運算,首先要將十進位制數變成二進位制補碼(在原碼的基礎上按位取反後加一即可得到補碼); 符號右側的數代表要移動的位數,每移動一位相當於乘除2(右移相當於除2,左移相當於乘2),無符號右移和左移右移的區別在於無符號忽略了正負即操作完無論正負都變成正數。
與運算子(&):它的運算規則是 有0則0;&作為位運算子時的運算給則和作為邏輯運算子時規則有相似的地方,那就是如果把0看做是假,1看做是真,那麼只有都是真(都是1)的時候,才是1。
或運算子(|):它的運算規則是 有1則1;|作為位運算子時的運算給則和作為邏輯運算子時規則有相似的地方,那就是如果把0看做是假,1看做是真,那麼只要存在乙個真(存在乙個1)的時候就是真(1)。注意:我之前錯誤的認為或運算是加法運算(運算時把兩個二進位制補碼載入一起),結果錯的一塌糊塗。所以才寫了這片補課,作為查缺補漏。
異或運算子(^):它的運算規則 相同則0不同則1;
反碼(~):運算規則 按位取反;
運算子過載的注意事項
在 c 中進行運算子過載時的注意事項 c 規定,運算子過載不改變運算子的優先順序。以下運算子不能被過載 sizeof 過載運算子 賦值運算子 和型別強制轉換運算子 時,只能將它們過載為成員函式,不能過載為全域性函式。必要時需要過載賦值運算子 即進行深拷貝,以避免兩個物件內部的指標指向同一片儲存空間。...
C 運算子過載的注意事項
1 過載操作符沒必要一定是成員函式,還可以是友元函式。2 過載操作符函式為成員函式主要是你需要操作類內部的成員,必須是成員函式或友元函式才行。3 至於由深淺拷貝的原因要使其成為成員函式,這個不知道。4 如果運算子被過載為全域性函式,那麼只有乙個引數的運算子叫做一元運算子,有兩個引數的運算子叫做二元運...
過載運算子的形式和注意事項
運算子過載 函式過載 是c 多型的重要實現手段之一。通過運算子過載對運算子功能進行特殊定製,使其支援特定型別物件的運算,執行特定的功能,增強c 的擴充套件功能。1 不可臆造運算子。2 運算子原有運算元的個數 優先順序和結合性不能改變。3 運算元中至少乙個是自定義型別。4 保持過載運算子的自然含義。一...