运算符,选择语句

cnblogs 2024-08-16 15:39:00 阅读 70

一,运算符

自变运算符: ++/-- 使变量的值自动加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:这个语句内的内容哦

可以去试一试。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。