運算子
算術運算子
運算子舉例
+加 a+b
-減 a-b
乘 ab
/除 a/b
%求餘 a%b
加減和乘法運算子不必多說,我們來看看除法運算子和求餘運算子
除法運算子
兩個實數相除的結果為雙精度實數,兩個整數相除的結果為整數(一般向0取整)
例如:5/3 執行結果為1,捨去了小數部分
根據整數除法特性:四捨五入 設計方法
四捨五入到個位
#include
int main()
float n = 1.525f; //float n = 1.425f;
printf("%d", (int)(n * 10 + 5)/10); //四捨五入到個位 輸出為 2
return 0;
四捨五入到小數點後兩位
#include
int main()
float n = 1.525f;
printf("%f", (int)(n*100+0.5)/100.0); //四捨五入到小數點後兩位
return 0;
當然也有函式可以實現四捨五入
裡面有個 round() 函式 將浮點值捨入為最接近的整數。
#include
#include
int main()
float n = 1.525f;
printf("%f", round(n)); //輸出為 2.000000
return 0;
求餘運算子
求餘只能兩個整數求餘
利用求餘得到整數的各個位數:水仙花數 演算法
#include
int main()
int i,n,m,l;
for(i=100;i<=999;i++)
n=i/100; //百位數
m=i%100/10; //十位數
l=i%10; //個位數
if(i==nnn+mmm+lll) //判斷水仙花數
printf("%d\t",i);
printf("\n");
return 0;
關係運算子和邏輯運算子
關係運算子
關係運算子和邏輯運算子主要用在分支和迴圈裡面作為條件判斷真假
比較的結果有兩種狀態 1 和 0 真(1)和假(0)
關係運算子舉例》小於 1>2 為假,結果為0《大於 1<2 為真,結果為2>=大於等於 1>=2 為假,結果為0<=小於等於 1<=2 為真,結果為1等於 12 為假,結果為0!=不等於 1!=2 為真,結果為1
對於小數 浮點型資料不夠精確 一般不用==
0.009
邏輯運算子
&& 邏輯與
左右兩個條件都為真 最後的結果為真 否則(只要有乙個為假) 結果為假
if(0.009
|| 邏輯或
左右兩邊的條件只要有乙個為真 結果為真 兩邊都為假 結果為假
if(x<0.009||x>0.011){}
!邏輯非
一般放在乙個條件前面 真變假 假變真
關於用數字作為條件 0為假 非0為真
邏輯運算子的截斷
邏輯與 兩邊都為真 結果為真
左邊為假 直接得到整個式子的結果為假(右邊可以不用算)
#include
int main()
int x=1;
if(0&&(++x)){}
printf("%d",x); //結果為1 即++x這個**未執行
return 0;
邏輯或 左邊為真 右邊可以不用算(截斷)
位運算子(二進位制運算子)
學c語言很少用到二進位制,但是,我們需要了解他
按位與 &
對乙個二進位制數字操作:有0則0
14&89 14二進位制:1110 89二進位制:0101 1001
0000 1110
0101 1001
按位與 0000 1000
結果為:0000 1000(二進位制),10(十進位制)
按位或 |
對乙個二進位制數字操作:有1則1
按位異或 ^
對乙個二進位制數字操作:相同為0不同為1
按位取反~
對乙個二進位制數字操作:1變0 0變1
~14 14二進位制:0000 1110
0000 1110
按位取反 1111 0001
左移 <<
x<
14<<2 14二進位制:0000 1110
0000 1110
0011 1000
左移補0 結果為0011 1000
右移 >>
x>>n 去掉後面的n位 前面補上n個符號位(正數前面補0 負數前面補1)
對於乙個正整數 右移一位相當於除以2
異或 ^
特點:對於同乙個數字異或兩次會得到它本身
148787==14
異或的用法
簡單的加密
z=x^y 對x進行加密
a=z^y 對z進行解密
交換兩個變數的值
//利用臨時變數交換
int temp;
temp=x;
x=y;
y=temp;
//利用異或
x=x^y;
y=x^y;
x=x^y;
//用加減法
x=x+y; //對於x和y比較大的時候 x+y可能超過int範圍
y=x-y;
x=x-y;
賦值運算子
把乙個值賦值給乙個變數: 左值 = 右值 把右值賦值給左值
x=4; //4這個值賦值給x這個變數
左值 只能是變數
右值 可以是數字 表示式(1+2)
條件運算子(三目運算子)
條件 ? 表示式1 : 表示式2
//求兩個數的最大值
max=a>b?a:b;
其他運算子
() 括號運算子
改變計算順序(優先順序)
型別轉換
(float)3/4:
型別轉換存在的問題:精度高的資料 轉換成精度低的資料 可能會丟失資料
型別 char int float double 精度由低到高
(int)(3.14+0.5) 小數強轉整數 小數部分全部丟掉
++ --自增和自減
前++先運算,再自增
int x,y;
x=0;
y=x++; //先用x之前的值進行計算 然後 再給x變數加1
//結果y=0,x=1
後++先自增,再運算
int x,y;
x=0;
y=++x; //先給x變數加1,再進行計算
//結果y=1,x=1
前加加,後加加**(小白勿看)
#include
int main()
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d,%d,%d,%d", p, q, i, j);
return 0;
輸出結果:15,22,8,8
這個涉及到 前加加先運算,再自增;後加加先自增,再運算 這一特性
#include
int main()
int i = 8;
//輸出 i
printf("%d\t", ++i); //i先加一在輸出 9 9
printf("%d\t", --i); //i先減一再輸出 8 8
printf("%d\t", i++); //i輸出再加一 8 9
printf("%d\t", i–); //i輸出再減一 9 8
printf("%d\t", -i++); //i輸出再加一 -8 9
printf("%d\t", -i–); //i輸出再減一 -9 8
printf("\n-----------------\n");
i = 8;
printf("%d\t%d\t%d\t%d\t%d\t%d\n", ++i, --i, i++, i–, -i++, -i–);//前加加完成後再後加加
return 0;
//執行結果
9 8 8 9 -8 -9
8 7 8 8 -8 -8
這又涉及到c的特性:語句編譯時從右往左
& 取變數位址
scanf("%d",&a);
sizeof 計算變數/型別的大小
sizeof(int)
逗號運算子 隔開幾個表示式
int x;
x=1,2,3+4,5,7; x最後的值是1
其他 下標運算子
. 點運算
-> 箭頭運算子
*指標運算子
() 函式
{}語句
其他後面介紹
優先順序這個不需要記,需要用的時候查表就可以
從上到下優先順序降低
不清楚優先順序順序加()企鵝號1075083208
C語言基礎 運算子
運算子 功能說明用途 按位取反 按位與 取出某數中想要的位 按位或 按位異或 1.特定位反轉 11001010 1111後四位反轉 2.交換兩個數的值 a a b b a b a a b 3.加密 a a b b 右移 左移 關於特殊運算子 1.賦值運算子 注 不能對常量賦值,不能對唯讀變數賦值 c...
C語言基礎學習運算子 關係運算子
比較大小 首先,我們得先了解一下布林型別。c語言的c99標準支援布林型別,關鍵字為 bool,用於表示邏輯值true與false。c語言用值1表示true,用值0表示false。因此布林型別實際上是一種整數型別。程式常常使用含有關係運算子的表示式進行分支和迴圈操作。我們將在分支和迴圈的章節中具體學習...
C語言基礎系列 運算子
優先順序 運算子名稱或含義 使用形式 結合方向 說明 1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名 2 負號運算子 表示式 右到左單目運算子 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數名 ...