操作符及其詳解

2021-08-30 15:54:26 字數 3740 閱讀 9395

算數操作符

算數操作符包括以下幾種

需要特別注意的是

1.除了%操作符之外,其他操作符都可以用於整形和浮點型的運算.

2.當執行/的操作符的運算時,兩邊的都為整形的時候執行的為整形的運算,但是只要存在浮點數執行的就是浮點數的運算

但是怎樣輸出又是另外一回事,但是我們需要知道的是,只要除號的兩端只要存在浮點數,執行的就是浮點型的運算

3.而至於取餘符號,%我們可以了解到的是,我們必須要求的是,%兩端的數字必須為整數,這個符號執行之後的結果就是兩個整數取餘之後的結果

我們知道對於除法運算,除數是不能為0的,此處編譯時是正常的,但是執行時會報錯

此處我們提出乙個猜想,對於%這個符號,它的右邊是否可以為0吶.

我們執行**之後可以發現,這種操作方式是無法執行程式的,所以我們得出結論

對於求模運算,運算符號的右邊是不能為0的

移位運算子

移位運算子包括兩種

<< 這種稱之為左移運算子,

>> 這種稱之為右移運算子

兩種運算子的區分方式就是根據運算子的尖端來進行判斷,如果尖端朝向左邊,我們稱之為左移運算子

如果尖端朝向了右邊,我們稱之為右移運算子

關於移位運算子的使用

#include

#include

int main()

輸出結果如下:

關於輸出結果的分析:

我們可以看到輸出結果為8,為什麼吶,因為在計算機中數字都是以二進位制位來進行表示的,左移一位就相當於2

所以: 4------->0100

那麼左移一位的結果就為1000------>8

同理右移運算子的操作方式也是相同的

特別注意

對於移位操作符,是不能對負數進行操作的,不然編譯器是會報錯的

這個標準是未定義的.

//當移位操作符移動的位數為負數字時

#include

#include

int main()

但是對於左移0位,和右移0位這種情況是可以進行操作的,只不過數字是不發生變化的

注意

在cpu中移位操作的效率是遠遠高於除法操作的效率的,所以我們可以看到,在有些的**中,當要執行除2的運算時,極有可能寫為右移一位這種形式,這種寫法是結合了cpu的操作效率來書寫的**,大大提高了**的操作效率

但是,**的可讀性有所下降

位操作

位操作包括三種

& 與| 或

^ 異或

注意:它們的執行中必須為整數,因為是在二進位制的情況之下進行執行的

按位與(&)

其操作規律為全1為1,有0為0

比如以下**

#include

#include

int main()

對於a我們可以轉化為 1---->0001

對於b我們可以轉化為2----->0010

按照按位與的結果應該為—>0000

我們可以看到程式的輸出結果為

與我們描述的相同

按位或(|)

其運算規律為有1為1,全0為0

#include

#include

int main()

我們來分析這段**

我們可以將a看做 1------>0001

我們可以將b看做2------->0010

按位與運算結束後的結果為—>0011

轉化為十進位制之後的結果就為3

**執行之後帶結果 我們可以看到就為3

**按位異或()**

按位異或的執行規律為相同為0,不同為1

我們來看以下的**:

#include

#include

int main()

和上面的**一樣,十進位制的數在計算機中也要轉化為二進位制進行計算

a-------->0001

b-------->0010

那麼按位異或之後的結果就為0011---->3

執行程式

對三種位運算的運算規律進行總結

按位與(&):全1為1,有0為0

按位或(|):有1 為1,全0為0

按位異或(^):相同為0,不同為1

再次強調,位運算都是針對於整數而言,在運算時轉化為二進位制進行運算

//求乙個數字中二進位制1的個數

#define _crt_secure_no_warnings

#include

#include

int ppp(int n)

//然後右移一位,繼續進行判斷

n = n >> 1;

}return count;

}int main()

執行的結果如下

當我們傳入的值為乙個負數的時候,會發生什麼樣的情況那

因為負數模乙個數的結果還為負數,所以這串**並不能執行負數這種情況

以上方法,只能實現判斷乙個正數二進位制存在幾個1,不能判斷負數

下面的方法,既可以判斷正數也可以判斷負數二進位制中1的個數

//方法2,求乙個數字中二進位制1 的個數

#define _crt_secure_no_warnings

#include

#include

int ppp(int n)

return count;

}int main()

這種寫法雖然**較為簡單,但是不便於理解

所以,不推薦

操作符詳解

操作符的兩個運算元必須為整數 左移操作符 右移操作符左移操作符規則 右邊補0 右移操作符規則 1 邏輯移位 僅是移位操作符 左邊補0 2 算數移位 要考慮符號位 左邊補符號位 注意 對於一位運算子不要移動負數字,這是為標準定義的 按位與 按位或 按位異或位操作符的運算元必須是整數 賦值復合賦值符 例...

操作符詳解

1 邏輯位移 左邊用0補充,右邊丟棄 2 算數移位 左邊補符號位,右邊丟棄例 不能建立臨時變數 第三個變數 實現兩個數的交換。include intmain 編寫 實現 求乙個整數儲存在記憶體中的二進位制中1的個數 方法1 include intmain printf 二進位制中1的個數 d n c...

詳解sizeof操作符

一 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用形式 sizeof ...