一,运算符
自变运算符: ++/-- 使变量的值自动加1或者减1
前自变:++num/--num 立即生效
后自变:num++/num-- 下一行语句才有效
注意:不要在一行代码中多次使用自变运算符
* ++ -i 这样对吗? 这样不对 在这里-i是表达式,自增自减只能针对一个变量进行运算!
-i++ 这样可以,此时是先 i++ 再取负值哦!
算术运算符: + - * / %
整数/整数 结果还是整数,没有小数点,只保留整数部分
10/3 -> 3
10%3 -> 1
/ % 除数不能为0,否则就会浮点数例外、(核心已转储),这是个运行报错,一旦产生程序立即停止,后面不再执行
注: 2%5 -2%5 2%-5 -2%-5 他们输出结果各是什么呢?
应该是 2 -2 2 -2
%它的结果以被取余的为基准即2,-2,2,-2
还有: printf("%lf", 5.0%2); 这是什么? 这样会报错
5.0%2中 %要求是整型且输出符号由被取余来决定 什么意思?
就是 printf("%ld", (long)5.0%2); 这样是对的而 printf("%d", (long)5.0%2); 这样能输出但是会警告;
若a % b == 0,说明a是b的整数倍
关系运算符: > < >= <= == !=
比较结果0(不成立)或1(成立),比较结果可以继续参与后续的运算
int n = -100;
if(10 < n < 100)
结果永远为真,与数学运算规则不同
注意:== 建议常量放左边
逻辑运算符: && || !
先把运算对象转换成逻辑值,0转换为假,非零转换真
A && B 一假即假
A || B 一真即真
!A 求反
&& || 短路特性:
当左边部分的值可以确定整个表达式的结果时,右边部分就不执行计算
什么意思?
其实就是 xxx && xxx 当左边表达式为假(0),右边直接被短路,若有运算则不参与运算
同理 xxx || xxx 当左边表达式为真(1),右边直接被短路,若有运算则不参与运算
eg:
int a, b, c;
a=b=c=0;
a++ && b++ || c++;
printf("%d, %d, %d", a, b, c);
输出什么? ---->a++ 为0,b++被短路了,但是c++没有被短路哦,这里要注意
故输出为1,0,1
条件/三目运算符:运算对象有三个部分
A ? B : C
判断A的值如果为真则执行B,否则执行C
赋值运算符
a = 10;
a += 10; a=a+10;
a -= 10;
a *= 10;
a /= 10;
a %= 10;
位运算符: & | ~ ^ << >>
逗号运算符:
*优先级最低
eg:int num = 0, num1=0;
num1 = (num=1,2,3);----> 括号中num被赋值为1,逗号优先级最低故num1=3
num=? num1=?
这时num应该等于1,num1等于3
二、分支语句
if(表达式); //单分支
{
//表达式为真(非零),则执行此处代码
}
if(表达式) //双分支
{
//表达式为真(非零),则执行此处代码
}
else
{
//表达式为假(零),则执行此处代码
}
if(表达式1) //多分支
{
//表达式1为真(非零),则执行此处代码
}
else if(表达式2)
{
//表达式2为真,则执行此处代码
}
else if(表达式3)
{
//表达式3为真,则执行此处代码
}
else
{
//如果以上所有表达式都为假,则最后执行此处代码
}
三,类型转换
只有相同类型的数据才能运算,如果类型不相同的数据需要先转换相同类型后再进行计算。
自动类型转换:
转换规则:
以不丢失数据为基础,可以适当地牺牲一些空间
1、字节少的向字节多的转
2、有符号的向无符号的转
3、整型向浮点型转
注意:char short如果与不同类型的数据运算时,会先提升为int类型后参与运算
强制类型转换:
(新类型名)数据;
这种方式有可能会丢失数据,慎重使用
四,switch开关分支语句
switch(n) //n可以是数值、表达式,运算结果必须是整数
{
case val: //如果val==n,则打开执行开关
//val必须是整型常量
...
break; //关闭执行开关,结束switch
//如果每个case后都加break,形成了分支结构
//switch中不能使用continue配合
//case a ... b: 可以表示[a,b],但是只有GNU编译器才支持该语法,不建议使用
case val1:
...
default:
//如果所有的case都没有打开,则最后打开default,并且放在任何位置都可以最后打开
}
这里有个有趣的现象:
在linux ubuntu16.04
case 要求是常量
const int a=1;
switch(1){
case a:.... }编译会错误的哦
但是在windows vscode-mingw 同样的方式不会报错哦,甚至会执行case a:这个语句内的内容哦
可以去试一试。
热门相关:大文豪 亡国公主穿成王府寡妇:二嫁王妃 福慧双全 我真是非洲酋长 新婚夜,大佬调戏娇妻上瘾了