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
#include

//计算 x 的立方根 
int main(){
	double x;
	while(scanf("%lf", &x)){
		printf("%lf\n", pow(x, 1.0 / 3));
	}
	return 0;
}

代码示例二:

#include
#include

#define pi acos(-1)

//读入一个角度值,将角度值转为弧度值 
int main(){
	double x;
	scanf("%lf", &x);
	printf("%lf", x * pi / 180); 
	return 0;
} 

你可能感兴趣的:(C,c语言)