运算符
-
算术运算符
符号 说明 优先级 结合性 用法 + 单目取正 14 从右到左 a=+8 - 单目取负 14 从右到左 b=-a * 乘 13 从左到右 a=12*5.5 / 整除,若有一个是负数,采取向0取整
例如
9/2=4
-9/2=-4
1/2=0
1.0/2=0.513 从左到右 b=14/6.5 % 取余,只能用于两个整数运算
结果符号与被除数一致
如果被除数小于除数,结果即为被除数13 从左到右 c=12%5 + 加 12 从左到右 a=12+5.5 - 减 12 从左到右 b=12-5.5 -
关系运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:运算符 描述 实例 == 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 为假。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。 > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 为假。 < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。 >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 为假。 <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。 -
逻辑运算符
假设变量 A 的值为 1,变量 B 的值为 0,则:运算符 描述 实例 && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。 || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。 ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。 -
位运算符
位运算符作用于位,并逐位执行操作。
假设变量 A 的值为 60,变量 B 的值为 13,则:运算符 描述 实例 & 按位与操作,按二进制位进行"与"运算
(A & B) 将得到 12,即为 0000 1100 | 按位或运算符,按二进制位进行"或"运算。
(A | B) 将得到 61,即为 0011 1101 ^ 异或运算符,按二进制位进行"异或"运算。
(A ^ B) 将得到 49,即为 0011 0001 ~ 取反运算符,按二进制位进行"取反"运算。
(~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。 << 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 A << 2 将得到 240,即为 1111 0000 >> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 A >> 2 将得到 15,即为 0000 1111 -
赋值运算符
运算符 描述 实例 = 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A <<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2 >>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2 &= 按位与且赋值运算符 C &= 2 等同于 C = C & 2 ^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2 |= 按位或且赋值运算符 C |= 2 等同于 C = C | 2 -
自加自减运算符
自增、自减运算符:++、–
只能用于变量,不能用于常量或表达式
前缀使用格式:++变量、–变量
后缀使用格式:变量++、变量–
当涉及到赋值的时候,前缀和后缀的使用方式有所不同
假设 i=1,k=0,则:
计算 k=++i 后,i=2,k=2
计算 k=–i 后,i=0,k=0
计算 k=i++ 后,i=2,k=1
计算 k=i-- 后,i=0,k=1 -
其他运算符
例子:运算符 描述 实例 sizeof() 返回变量的大小。 sizeof(a) 将返回 4,其中 a 是整数。 & 返回变量的地址。 &a; 将给出变量的实际地址。 * 指向一个变量。 *a; 将指向一个变量。 ? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y #include <stdio.h> int main(){ int a = 4; short b; double c; int* ptr; // 指向一个整型变量 printf("变量a的大小=%u\n", sizeof(a)); printf("变量b的大小=%u\n", sizeof(b)); printf("变量c的大小=%u\n", sizeof(c)); /* &和*涉及指针的知识 */ ptr = &a; // ptr现在包含a的地址 printf("a的值为%d\n", a); printf("*ptr的值为%d\n", *ptr); printf("ptr的值为%d\n", ptr); a = 10; b = (a == 1) ? 20:30; printf("b的值为%d\n", b); b = (a == 10) ? 20:30; printf("b的值为%d\n", b); return 0;}
运行结果:
-
逗号运算符和逗号表达式
格式:表达式1, 表达式2, …, 表达式n
求解顺序:从左到右依次求解
结果:整个表达式的值为表达式n的值,类型为表达式n的类型
例如:
a=3*5, a*4,结果为60
a=3*5, a*4, a+5,结果为20
x=(a=4%3, a+1, a*10),结果为10 -
运算符优先级和结合性
下表将按运算符优先级从高到低列出各个运算符
类别 运算符 结合性 后缀 () [] -> . ++ - - 从左到右 一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 乘除 * / % 从左到右 加减 + - 从左到右 移位 << >> 从左到右 关系 < <= > >= 从左到右 相等 == != 从左到右 位与 AND & 从左到右 位异或 XOR ^ 从左到右 位或 OR | 从左到右 逻辑与 AND && 从左到右 逻辑或 OR || 从左到右 条件 ?: 从右到左 赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左 逗号 , 从左到右
常用数学库函数
调用数学函数时,源文件要包含头文件math.h,即#include <math.h>
常用函数 | 写法 |
---|---|
平方根函数 | sqrt(x) |
绝对值函数 | fabs(x) |
幂函数 | pow(x,n) |
以e为底数的指数函数 | exp(x) |
以e为底数的对数函数 | log(x) |
三角函数 | sin(x) |