1.强制转换
显示转换
- eg:(转化目标类型)原类型
#include <stdio.h>
int main()
{
int i;
float pI=3.14159;
int i = (int)pI;
printf("%d %d",pI,i);
return 0;
}
隐式转换
系统默认的转化规则(向范围更大的兼容)
#include<stdio.h>
int main()
{
int b = 4;
double a = b;
printf("%lf",a);
return 0;
}
2.算术运算符
-
*乘号 整数相乘还是整数 保证输出结果为小数C*(C*1.0)
-
/除号
-
%整数取余eg:198%10=8 198%100=98 198/100%10=1;
-
C++先参与运算再自增
-
++C先自增再参与运算
3.关系运算符
< > <= >= != ==v
4.逻辑运算符
1.逻辑与&&(短路与)(不止两个条件,可以有多个条件表达)
eg:条件1&&条件2 此表达式的结果要为真,条件1和条件2都必须成立
2.逻辑或||(短路或)
eg:条件1&&条件2 此表达式的结果要为真,条件1或条件2成立一个就行了
3.逻辑非!
将假的变成假的,假的变成真的,
eg:!条件1(条件真结果假,条件假结果真)
5.位运算
对二进制位进行运算
A.&按位与 全一则一有零则零
eg:
#include<stdio.h>
int main()
{
int a, b;
a = 1 & 1;
b = 1 & 0;
printf("%d %d",a,b);
return 0;
}
B.|按位或 有一则一全零则零
#include<stdio.h>
int main()
{
int a, b;
a = 1 | 0;
b = 0 & 0;
printf("%d %d",a,b);
return 0;
}
C.按位异或^相同为零相异为1
#include<stdio.h>
int main()
{
//将a与b的值进行交换
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d",a,b);
return 0;
}
eg:交换a和b
a=a^b;
b=a^b——>b=a//这里是将b=a带回上面a=a^b再将a=a^b带到下面的a=a^b即可
a=a^b——>a=b
~按位取反取反码进行取反
左移运算符号<<
int num = 12;res = num<<2;(左移两位右边消去,左边加零)
二进制左移两位*2*2左移三位*2*2*2;(左移乘右移除)
>>右移动
逻辑右移低位丢弃,高位补符号位
算术右移低位丢弃,高位补符号位
#include<stdio.h>
int main()
{
int a, b,c;
char d = 12>> 2;
a = 12;
b = a <<2;
c = a >>2;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
6.赋值复合运算符
+= -= *=
7.逗号运算符和三目运算
逗号运算符
rat =(表达式1,表达式2,表达式3)将前面(逗号优先级最低)
#include<stdio.h>
int main()
{
int a,b,ret;
a = 3;
b = 4;
ret = (a += 20, b += 20, a * b);
printf("%d %d %d ",a,b, ret);
return 0;
}
三目运算符(三个操作符)
格式:条件表达式?表达式1:表达式2;
含义:条件表达式成立,整个表达式的值是1(真),否则是表达式2(假)。
单目!,~
取反小技巧
int a当a>0时取反结果为-(a+1)
当a<0时取反结果为 | a-1|
当a=0时取反结果为-1
特别注意:运算时自右向左看(赋值运算,三目运算)
总结:
算术运算>关系运算>逻辑运算>赋值运算