變數存資料,運算子處理資料,運算子與常量變數組合起來叫表示式,每個表示式都有值。
運算子有三類:單目運算(帶乙個運算元),雙目運算(帶兩個運算元),三目運算(帶三個運算元)
被賦值變數的值,就是整個表示式的值
//c 語言會自動將 = 右邊表示式值的資料型別自動轉換為 = 左邊的變數的資料型別,然後再賦值給 = 左邊的變數。a 的值為 5,整個表示式(a=5)的值也為 5
a = 5;//
連續賦值運算從右向左(右結合性)
//先賦值 c=10,再 b=c(10),最後 a=b(10)
//整個表示式的值為 10
a=b=c=10;//
+ 優先順序高於 =
//先賦值 b=2,再 c=3,最後 a=5
//整個表示式的值為 5
a=(b=2)+(c=3);
資料型別轉換只針對本次運算,是臨時性轉換,不改變資料說明時對該變數定義的型別。
自動轉換規則:
無符號短長度 ---> 無符號或有符號長長度:高位部分補 0(0101 ---> 0000 0101)
有符號短長度 ---> 無符號或有符號長長度:高位部分補 0 或 1,看被轉換資料的最高位(1101 ---> 1111 1101,0101 ---> 0000 0101)
強制轉換:
//算數運算子包括五種:+、-、*、/、%,其中 % 只能用於整數的運算型別說明符優先順序比較高
float x = 3.5, y = 2.1
;long a = 0xffffa032;//
把 x+y 的值轉為 int,x 與 y 的型別並沒有改變
(int)(x+y);
//把 x 的值轉為 int,x 的型別並沒有改變
int b = (int)x;
簡單表示式:單個常量、變數或函式
複雜表示式:運算子+括號+運算物件(常量、變數、函式。。。)
算數表示式:表示式中的運算子都是算數運算子
運算子優先順序:型別強制轉換運算子 > 算數運算子 > 賦值運算子
c 語言不對資料溢位進行檢查:當表示式的值超出了對應資料型別的取值範圍,就會丟失資料
++i:先增減後運算
i++:先運算後增減
//只能用於變數,不能用於表示式先輸出 i 的值,再讓 i+1
printf("
%d", i++);
p = i++ + i++; //
相當於 p = (i++) + (i++);
p = i++ + --i; //
相當於 p = (i++) + (--i);
錯誤語法:++i++、++i--、--i++、--i--、i++=5
位運算包括:與 &、或 |、按位取反 ~、按位異或 ^、左移 <>
優先順序:(~)>(<< 、>>)>(&)>(^)>(|)
0&0=0 0|0=0 0^0=0 ^0=10&1=0 0|1=1 0^1=1 ^1=0
1&0=0 1|0=1 1^0=1 1010>>2=10
1&1=1 1|1=1 1^1=0 1010<<2=101000
//最後乙個表示式的值就是整個逗號表示式的值
//b 的值為 9,表示式 (a=4, b=a+5, b++) 的值為 9
a=4, b=a+5, b++;
//a 的值為 3,表示式 (x=a=3, 6*a) 的值為 18
x=a=3, 6*a;
//如何看待資料的最高位檢視 int 所佔記憶體大小(位元組)
printf("
%d",sizeof(int
));//
復合賦值運算子,與 = 為同一優先順序
//exp1 op= exp2; 等價於 exp1 = exp1 op exp2;
x *= y + 8; //
x = x * (y+8)
x &= y = 3; //
y = 3; x = x & y;
表示式中運算元符號不同時,所有運算元都自動轉換為無符號型別(某種意義上無符號數的運算優先順序高於有符號數)
浮點數都是有符號數,unsigned 和 signed 字首不能加在 float 和 double 上,不用轉化
注1:優先順序相同的運算子,運算次序由結合性決定。
注2:* 目運算子是指運算元的個數,比如單目運算子只有乙個運算元,雙目運算子有兩個運算元,而三目運算子則有三個運算元。
注3:通過使用小括號可以提公升表示式的優先順序至最高。
優先順序運算子
含義使用形式
結合性說明
1[ ]
陣列下標
陣列名[整型表示式]
左到右→
( )圓括號
(表示式)
.成員選擇(物件)
物件.成員名
->
成員選擇(指標)
物件指標->成員名
++自增運算子
變數名++
單目運算子
--自減運算子
變數名--
單目運算子2-
負號運算子
-表示式
右到左←
單目運算子
(型別)
強制型別轉換
(資料型別)表示式
單目運算子
++自增運算子
++變數名
單目運算子
--自減運算子
--變數名
單目運算子
*取值運算子
*指標表示式
單目運算子
&取位址運算子
&左值表示式
單目運算子
!邏輯非運算子
!表示式
單目運算子
~按位取反運算子
~表示式
單目運算子
sizeof
長度運算子
sizeof 表示式
或sizeof(型別)
單目運算子3/
除表示式 / 表示式
左到右→
雙目運算子*乘
表示式 * 表示式
雙目運算子
%餘數(取模)
整型表示式 % 整型表示式
雙目運算子4+
加表示式 + 表示式
左到右→
雙目運算子-減
表示式 - 表示式
雙目運算子
5<<
左移表示式 << 表示式
左到右→
雙目運算子
>>
右移表示式 >> 表示式
雙目運算子
6>
大於表示式 > 表示式
左到右→
雙目運算子
>=
大於等於
表示式 >= 表示式
雙目運算子
<
小於表示式 < 表示式
雙目運算子
<=
小於等於
表示式 <= 表示式
雙目運算子7==
等於表示式 == 表示式
左到右→
雙目運算子
!=不等於
表示式 != 表示式
雙目運算子8&
按位與整型表示式 & 整型表示式
左到右→
雙目運算子9^
按位異或
整型表示式 ^ 整型表示式
左到右→
雙目運算子10|
按位或整型表示式 | 整型表示式
左到右→
雙目運算子
11&&
邏輯與表示式 && 表示式
左到右→
雙目運算子
12||
邏輯或表示式 || 表示式
左到右→
雙目運算子
13?:
條件運算子
表示式1? 表示式2: 表示式3
右到左←
三目運算子14=
賦值運算子
變數 = 表示式
右到左←
雙目運算子
/=除后賦值
變數 /= 表示式
雙目運算子
*=乘後賦值
變數 *= 表示式
雙目運算子
%=取模後賦值
變數 %= 表示式
雙目運算子
+=加後賦值
變數 += 表示式
雙目運算子
-=減後賦值
變數 -= 表示式
雙目運算子
<<=
左移後賦值
變數 <<= 表示式
雙目運算子
>>=
右移後賦值
變數 >>= 表示式
雙目運算子
&=按位與後賦值
變數 &= 表示式
雙目運算子
^=按位異或後賦值
變數 ^= 表示式
雙目運算子
|=按位或後賦值
變數 |= 表示式
雙目運算子15,
逗號運算子
表示式1,表示式2,表示式3,…
左到右→
C 運算子與表示式
作用 用於處理四則運算 算術運算子包括以下符號 運算子術語示例結果 正號 33 負號 3 3 加 10 515 減10 55 乘10 550 除10 52 取模 取餘 10 31 前置遞增 a 2 b a a 3 b 3 後置遞增 a 2 b a a 3 b 2 前置遞減 a 2 b a a 1 b...
C 運算子與表示式
作用 用於處理四則運算 算術運算子包括以下符號 運算子術語示例結果 正號 33 負號 3 3 加 10 515 減10 55 乘10 550 除10 52 取模 取餘 10 31 前置遞增 a 2 b a a 3 b 3 後置遞增 a 2 b a a 3 b 2 前置遞減 a 2 b a a 1 b...
運算子與表示式
學習c語言時,在我們已經學習了型別,常量與變數,接下來就是通過學習運算子與表示式對型別,常量與變數進行運算。簡單說一下概念,用來對資料進行運算的符號,就可以稱為運算子。c中運算子和資料構成的式子,就稱為表示式。表示式再在其後加乙個分號,即構成c 語言語句。先說一下運算子吧。c語言的運算子多,一般記住...