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