算数操作符
+ :加法操作符
- :减法操作符
* :乘法操作符
/ :除法操作符
% :取余操作符
注意:
- 除 % 之外,其余4个均可以作用于整数和浮点数
- 对于 / 操作符,如果两个操作数均为整数,则执行整数除法(结果取整数部分,eg:5/2=2);若存在 浮点数,则进行浮点数除法
- % 的两个操作数必须为正数
移位操作符
>>:右移操作符
<<:左移操作符
注意:
- 右移操作符(相当于除法)
1、逻辑右移:左边补0,右边丢弃
2、算数右移:左边用原符号位填充,右边丢弃
原值:0000 1011 11
>>1:0000 0101 5 11/2^1
>>2:0000 0010 2 11/2^2
- 左移操作符(相当于乘法)
1、左边丢弃,右边补0
2、逻辑左移和算术左移规则相同
原值:0000 1011 11
<<1:0001 0110 22 11*2^1
<<2:0010 1100 44 11*2^2
注意:移位操作符不能移动负数位,否则会出现警告
位操作符
&:按位与(有0则0,全1才1)
eg:(0000 0101)&(0000 0110) --> 0000 0100
|:按位或(有1则1,全0才0)
eg:(0000 0101)|(0000 0110) --> 0000 0111
^:按位异或(相同为0,不同为1)
eg:(0000 0101)^(0000 0110) --> 0000 0011
复合赋值符
+=、-+、*=、/=、%=、>>=、<<=、&=、^=、|
(都可以写成复合的效果)
eg:i+=1和i=i+1是等效的
单目赋值符
!:逻辑反操作
-:负值
+:正值
&:取地址
sizeof:操作数的类型长度(以字节为单位)
~:对一个数的二进制按位取反
- -:前置/后置- -
++:前置/后置++
*:间接访问(解引用)
(类型):强制类型转换
注意:
- sizeof在编译期间确定表达式的字节大小,不影响后面的值
- 前置++和前置- -:先进行+或-的操作,再使用
- 后置++和后置- -:先使用,再进行+或-的操作
关系操作符
>、>=、<、<=、!=(不等于)、==(等于)
注意:“=”用于赋值,“==”用于判断相等
逻辑操作符
&&:逻辑与
||:逻辑或
短路与
int i=0,a=1,b=2,c=3,d=4;
i=a++&&++b&&d++;
输出abcd:1234
//短路与(为真执行,为假不再继续向后执行)
短路或
int i=0,a=1,b=2,c=3,d=4;
i=a++||++b||d++;
输出abcd:1334
//短路与(为假执行,为真不再继续向后执行)
条件操作符(三目操作符)
表达式1 ? A : B
如果表达式1为真,返回A,否则返回B
(常用于求两个数中的最大值)
逗号表达式
A,B,C,D,……
注意:从左向右依次执行,整个表达式的结果是最后一个表达式的结果
eg:
int a=1;
int b=2;
int c=(a>b,a=b+10,a,b=a+1);
输出c的值为13
算术转换
long double
double
float
unsigned long int
long int
unsigned int
int
- 如果两个操作数中有一个操作数的类型在上面的列表中排名较低,首先要转换成另外一个操作数的类型,然后再进行运算。