C语言之数学运算

C语言基本运算符

运算符说明例子备注
=赋值运算符a = b;
+、-、*、/、()基本四则运算a = (b + c) * d;
%求余运算符a = b % 2;计算速度最慢且只能针对整数
&、|、^、~位运算a = ~b | c;计算速度最快
<<、>>左移和右移a = b >> 2;

类型转换

  • 显式类型转换(强制类型转换)
  • 隐式类型转换

位运算

  • 二进制表示下进行的一类运算
  • 二进制位与对应二进制位进行的一类运算
  • 位运算只针对整型
  • 使用位运算需要考虑代码可读性

1. 按位与运算符 &

  • 单目:取地址
  • 双目:按位与(全 1 则为 1,有 0 则为 0)
&运算结果
1 & 11
1 & 00
0 & 10
0 & 00

示例:%2 相当于 &1(整数判断奇偶性只与二进制的最后一位有关,若最后一位为 1 则为奇数)

2. 按位或运算符 |

按位或:有 1 则为 1 ,全 0 才为 0

|运算结果
1 | 11
1 | 01
0 | 11
0 | 00

3. 按位异或运算符 ^

按位异或:相同为 0不同为 1

&运算结果
1 ^ 10
1 ^ 01
0 ^ 11
0 ^ 00

^ 是 ^ 的逆运算符,示例如下:

  • 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

~运算结果
~10
~01

5. 左移 << 和 右移 >>

左移:低位补 0,左移 N 位等价于 乘 2 的 N 次方,可替换乘法
右移:高位补符号位,**左移 1 位等价于 除 2 **,可替换除法

C语言中的数学函数库

常用函数头文件函数原型功能说明示例
pow(a,n)math.hdouble pow(double a, double b)指数函数,a 为底数,b 为指数,返回 a 的 b 次方pow(2, 3) = 8
sqrt(n)math.hdouble sqrt(double x)开平方函数,x 为被开方数,返回根号 x 的结果sqrt(16) = 4
ceil(n)math.hdouble ceil(double x)上取整函数,x 为某个实数,返回 x 向上取整的值ceil(4.1) = 5
floor(n)math.hdouble floor(double x)下取整函数,x 为某个实数,返回 x 向下取整的值floor(4.9) = 4
abs(n)stdlib.hint abs(int x)整数绝对值函数,x 为某个整数,返回 x 的绝对值abs(-4) = 4
fabs(n)math.hdouble fabs(double x)实数绝对值函数,x 为某个实数,返回 x 的绝对值fabs(-4.5) = 4.5
log(n)math.hdouble log(double x)以 e 为底对数函数,x 为某个实数,返回 log 以 e 为底的值log(9) = 2.197225…
log10(n)math.hdouble log10(double x)以 10 为底对数函数,x 为某个实数,返回 log 以 10 为底的值log10(1000) = 3
acos(n)math.hdouble 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;
} 

更多推荐

C语言-数学运算