算數操作符
算數操作符包括以下幾種
需要特別注意的是
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 ...