C语言-数学运算
C語(yǔ)言之?dāng)?shù)學(xué)運(yùn)算
C語(yǔ)言基本運(yùn)算符
| = | 賦值運(yùn)算符 | a = b; | |
| +、-、*、/、() | 基本四則運(yùn)算 | a = (b + c) * d; | |
| % | 求余運(yùn)算符 | a = b % 2; | 計(jì)算速度最慢且只能針對(duì)整數(shù) |
| &、|、^、~ | 位運(yùn)算 | a = ~b | c; | 計(jì)算速度最快 |
| <<、>> | 左移和右移 | a = b >> 2; |
類型轉(zhuǎn)換
- 顯式類型轉(zhuǎn)換(強(qiáng)制類型轉(zhuǎn)換)
- 隱式類型轉(zhuǎn)換
位運(yùn)算
- 在二進(jìn)制表示下進(jìn)行的一類運(yùn)算
- 二進(jìn)制位與對(duì)應(yīng)二進(jìn)制位進(jìn)行的一類運(yùn)算
- 位運(yùn)算只針對(duì)整型
- 使用位運(yùn)算需要考慮代碼可讀性
1. 按位與運(yùn)算符 &
- 單目:取地址
- 雙目:按位與(全 1 則為 1,有 0 則為 0)
| 1 & 1 | 1 |
| 1 & 0 | 0 |
| 0 & 1 | 0 |
| 0 & 0 | 0 |
示例:%2 相當(dāng)于 &1(整數(shù)判斷奇偶性只與二進(jìn)制的最后一位有關(guān),若最后一位為 1 則為奇數(shù))
2. 按位或運(yùn)算符 |
按位或:有 1 則為 1 ,全 0 才為 0
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
3. 按位異或運(yùn)算符 ^
按位異或:相同為 0 ,不同為 1
| 1 ^ 1 | 0 |
| 1 ^ 0 | 1 |
| 0 ^ 1 | 1 |
| 0 ^ 0 | 0 |
^ 是 ^ 的逆運(yùn)算符,示例如下:
- a ^ b = c 等價(jià)于 c ^ b = a 等價(jià)于 c ^ a = b
- n ^ n = 0
- n ^ 0 = n
示例:
int a, b; scanf("%d%d", &a, &b); //實(shí)現(xiàn)交換 a 和 b 的值 // a1 = a ^ b a ^= b; // b1 = a1 ^ b = a ^ b ^ b = a ^ 0 = a b ^= a; // a = a1 ^ b1 = a ^ b ^ a = a ^ a ^ b = 0 ^ b = b a ^= b;4. 按位取反運(yùn)算符 ~
按位取反:0 轉(zhuǎn)換為 1 , 1 轉(zhuǎn)換為 0
| ~1 | 0 |
| ~0 | 1 |
5. 左移 << 和 右移 >>
左移:低位補(bǔ) 0,左移 N 位等價(jià)于 乘 2 的 N 次方,可替換乘法
右移:高位補(bǔ)符號(hào)位,**左移 1 位等價(jià)于 除 2 **,可替換除法
C語(yǔ)言中的數(shù)學(xué)函數(shù)庫(kù)
| pow(a,n) | math.h | double pow(double a, double b) | 指數(shù)函數(shù),a 為底數(shù),b 為指數(shù),返回 a 的 b 次方 | pow(2, 3) = 8 |
| sqrt(n) | math.h | double sqrt(double x) | 開平方函數(shù),x 為被開方數(shù),返回根號(hào) x 的結(jié)果 | sqrt(16) = 4 |
| ceil(n) | math.h | double ceil(double x) | 上取整函數(shù),x 為某個(gè)實(shí)數(shù),返回 x 向上取整的值 | ceil(4.1) = 5 |
| floor(n) | math.h | double floor(double x) | 下取整函數(shù),x 為某個(gè)實(shí)數(shù),返回 x 向下取整的值 | floor(4.9) = 4 |
| abs(n) | stdlib.h | int abs(int x) | 整數(shù)絕對(duì)值函數(shù),x 為某個(gè)整數(shù),返回 x 的絕對(duì)值 | abs(-4) = 4 |
| fabs(n) | math.h | double fabs(double x) | 實(shí)數(shù)絕對(duì)值函數(shù),x 為某個(gè)實(shí)數(shù),返回 x 的絕對(duì)值 | fabs(-4.5) = 4.5 |
| log(n) | math.h | double log(double x) | 以 e 為底對(duì)數(shù)函數(shù),x 為某個(gè)實(shí)數(shù),返回 log 以 e 為底的值 | log(9) = 2.197225… |
| log10(n) | math.h | double log10(double x) | 以 10 為底對(duì)數(shù)函數(shù),x 為某個(gè)實(shí)數(shù),返回 log 以 10 為底的值 | log10(1000) = 3 |
| acos(n) | math.h | double acos(double x) | acos函數(shù),x 為角度的弧度值,但會(huì) arccos(x) 的結(jié)果 | acos(-1) = 3.1415926… |
| … | … | … | … | … |
代碼示例一:
#include<stdio.h> #include<math.h>//計(jì)算 x 的立方根 int main(){double x;while(scanf("%lf", &x)){printf("%lf\n", pow(x, 1.0 / 3));}return 0; }代碼示例二:
#include<stdio.h> #include<math.h>#define pi acos(-1)//讀入一個(gè)角度值,將角度值轉(zhuǎn)為弧度值 int main(){double x;scanf("%lf", &x);printf("%lf", x * pi / 180); return 0; }總結(jié)
- 上一篇: 220112-3步Word双栏排版图表单
- 下一篇: word pdf 互转