1.%不可以作用於整數和浮點數,例如:int % double,必須兩個運算元都為整型;
2.對於/操作符,若兩個運算元都為整型則進行整型運算,若有乙個運算元為浮點型,則進行浮點數運算。
1.左移: num<<1,左邊拋棄,右邊補0;
2.右移:num>>1
(1)邏輯移位:左邊補0,右邊丟棄;
(2)算術移位:左邊用原本值的符號位填充,右邊丟棄。
記憶體中儲存負數為其補碼,-1則為32位全1對於移位操作符,不要移動負數字,這是標準為定義的。
int num =10;
num>>-1
//error
&
//按位與
|//按位或
^//按位異或
//以上操作符的運算元都必須為整數
面試題:
不能建立臨時變數,實現兩個數的交換。
int main()
sizeof 運算元的型別長度(以位元組為單位)
~ 對乙個數的二進位制形式按位取反
*間接訪問操作符(解引用操作符)
(型別) 強制型別轉換
特別注意==和=不小心寫錯,造成的弱智bug
int main()
邏輯與運算,若左運算元為0,則不再進行右運算元的運算;邏輯或運算,若左運算元為1,則不再進行右運算元的運算。
exp1 ? exp2 : exp3
exp1, exp2, exp3,
...
逗號表示式,從左到右依次執行,結果為最後乙個表示式的結果1.[ ]下標引用操作符
運算元:乙個陣列名 + 乙個索引值 (兩個運算元)2.()函式呼叫操作符至少有乙個運算元(函式名)
3.訪問乙個結構的成員
. 結構體.成員名整形提公升-> 結構體指標->成員名
表示式的整型運算要在cpu的相應運算器件中執行,cpu內整型運算器(alu)的運算元的位元組長度一般就是int的位元組長度,同時也是cpu的通用暫存器的長度;因此,即使兩個char型別相加,在cpu中執行時實際上也要先轉換為cpu內整數運算元的標準長度;
通用cpu是難以直接實現兩個8位元位直接相加運算,所以表示式中各種長度可能小於int長度的整型值,都必須先轉換為int或unsigned int,然後才能送入cpu執行運算。
char a, b, c;
a = b + c;
b和c的值先被提公升為普通整型,然後再執行加法運算;
加法運算完成之後,結果被截斷,然後再存入a中。
整形提公升是按照變數的資料型別的符號位來提公升的
//負數的整形提公升
char c1 =-1
; c1只有8個位元位:
11111111
整形提公升後:
11111111111111111111111111111111
//正數數的整形提公升
char c2 =1;
00000001
00000000000000000000000000000001
//無符號整形提公升,高位補0
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...
C語言 , 操作符
例如 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為cout hello world endl 例如 define concatenate x,y x y int xy 10 將會使編譯器把 cout conc...
C語言操作符
操作符的分類 1 算術操作符 2 移位操作符 3 位操作符 4 賦值操作符 5 單目操作符 6 關係操作符 7 邏輯操作符 8 條件操作符 9 逗號表示式 1 算術操作符 1 除了 操作符之外,不能用於浮點數。2 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...