算术操作符
基本算术操作符:
+ :正号操作符(一元操作符)
- :负号操作符(一元操作符)
* :乘法操作符
/ :除法操作符
%:求余操作符
+ :加法操作符(二元操作符)
-:减法操作符(二元操作符)
tips 1 两个整数相除的结果为整数,舍去小数部分,例如,5/3结果为1。
2 如果除数或被除数中有一个为负值,舍入方向不固定
3 % 操作符要求参加运算的操作数为整数,结果也是整数
*同一个字母的小写字符的ASCII代码比大写字符的ASCII代码大32
*#include <math.h>
area = sqrt(s * (s - a) * (s - b) * (s - c))
*float:输入输出都用%f
double输入输出都用%lf
自增和自减操作符
int main()
{
int a=7;
printf("%d %d",a++,a);//8 8
printf("%d %d",++a,a);//7 8
return 0;
}
++i,--i:先使i的值加(减)1,然后使用i的值。相当于计算i=i+1,并且整个赋值表达式的返回值为i+1
i++,i--:先使用i的值,然后使i的值加(减)1。相当于计算i=i+1,并且整个赋值表达式的返回值为i
指针加法和减法
指针类型的值加上一个整数n,是加上n个指向对象所占的字节数
对于int *p,如果p的值为2000,那么p+3的值是2000+3*sizeof(int)=2012,而不是2003。
位操作符
位运算是指按二进制位进行的运算。
位运算可以将多个标志状态组合在一起,也可以将标志状态从字节中分离出来
按位与& :对应位均为1时结果位为1,否则为0。
按位或|:对应位均为0时结果位为0,否则为1.
按位异或^:对应位不相同时结果位为1,否则为0
按位取反~:各位翻转
按位左移<< 使左操作数的各位左移,高位溢出,低位补0。
按位右移>> 使左操作数的各位右移,低位溢出,高位对无符号数和有符号中的正数,补0;对有符号数中的负数...
复合赋值操作符
复合赋值操作符包括:+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
例如:a+=3 等价于 a=a+3
a&=3 等价于 a=a&3
关系操作符
< (小于)
<= (小于或等于)
> (大于)
= (大于或等于)
————————————优先级高低
== (等于)
!= (不等于)
关系表达式的操作数是数值;关系表达式的值是一个逻辑值,即“真”或“假”
将逻辑值转换为数值:“真”转换为数值1,“假”转换为数值0。
将数值转换为逻辑值: 非0数值转换为“真”,数值0转换为“假”。
逻辑操作符(优先级递减)
操作数和值都是逻辑值
逻辑非 ! (一元操作符)
逻辑与&&(二元操作符):只有当二者都真时,表达式才是真
逻辑或 || (二元操作符):只有当二者都假时,表达式才是假
短路特性:逻辑表达式求解时,并非所有的逻辑操作符都被执行,只是在必须执行下一个逻辑操作符才能求出表达式的解时,才执行该操作符。
例:a && b && c //只在a为真时,才判断b的值
//只在a、b都为真时,才判断c的值
例:a || b || c //只在a为假时,才判断b的值
//只在a、b都为假时,才判断c的值
条件操作符
Expr1 ? Expr2 : Expr3
int main()
{
char c;
c=getchar();
c=(c>'A'&&c<'Z')?(c+32):c;
putchar(c);
return 0;
}
隐式类型转换和强制类型转换
隐式类型转换
强制类型转换
(Type) Expr
例如:(double)a (将a转换成double类型)
(int)(x/y) (将x/y的值转换成int型)
(float)(5%3)(将5%3的值转换成float型)
表达式和语句
表达式的末尾没有分号,而语句有分号。
在表达式的末尾加上一个分号就成为了一个语句。