C语言常用的知识没多少之运算符与表达式

在现实中学完数数就要开始学习数的运算,如加减乘除等。C语言也有对数的运算,有算数运算、赋值运算、关系运算、逻辑运算、位运算、条件运算、逗号运算、sizeof运算。在此按照顺序讲解一些常用的运算。

算数运算

算数运算有加(+)、减(-)、乘(*)、除(/)、取余或模运算(%)、自加(++)、自减(--)、正号(+)、负号(-)。这些运算的符号称为运算符。在这里运算和运算符没有严格的区分。其中加减乘除和取余属于双目运算符,及运算时需要两个数进行运算,一个数是不能进行运算的。

加减乘除需要注意的是运算结果要和运算数的数据类型一样及在其数据类型的范围内,否则很容易出现运算问题。如下结果显示表示如果数超出范围和数据类型不一样会造成不正确的运算(有时输出的格式控制符不一样会造成原本错误的数正常显示,这样做虽然与理想结果一样,但希望不要钻空子)。

取余运算符需要注意的是两个运算数必须都是整数,否则会出现错误,运行时会报错。预算结果的正负号与第一个运算数的结果保持一致。如下所示。

有时为了节省代码的输入量,会将上述的运算符进行省写。如n+=5就是省写,其完整写法为n=n+5。省写是不会改变上述运算符的双目运算符的特性。取余运算符也可以这样省写,如n%=5,表示n=n%5。

其余的算数运算符都属于单目运算符,即只需一个运算数即可进行运算。正号和负号是改变数值的正负性,只需考虑数据类型的范围即可,不算常用。以上的运算符的一个或两个运算数可以为常量也可以为变量。常量如果是字符型的,如字母a等,在进行运算时会将他们看成一个数,数值的大小根据ASCII表中十进制(二进制与十进制等的数值大小一样)的大小确定。

接下来就讲解一下比较常用的运算符——自加(++)和自减(--)。他们与运算数的先后顺序不一样也会造成运算结果的不一样。

运算数在前,自加运算符在后,如n++那么先考虑n的值为几,等开始自加运算符计算时再使n相加1,简单说就是先用后加。如下所示,第五行的代码使n的数值为5。第六行代码查看n++运算中n的值为多少,因为是先考虑n的值或先使用n,所以n的值为5,等输出或使用后就进行自加运算,使n加1,这时n的值为6。第七行的代码是查看n的值,这时依然为6。

自己运算符在前,运算数在后,如++n。则与前面的结果相反,是先使n加1,然后考虑或使用n的值。如下所示,只是将n++换成++n,那么结果就不一样了。

自减与自加的情况一样,远算数与运算符的先后顺序不一样,那么结果就会不一样。两者都需要注意的是自加和自减后的数值大小要在数据类型的范围之内。

赋值运算符

赋值运算符包括等号(=)、之前所说的省写以及以后要说的逻辑运算符的省写。赋值运算符是将左边的数值(可以是变量、常量和表达式)赋给右边的变量,不能是常量。右边是一个可以包含左边变量的表达式。表达式是含有变量和常量的运算式,其中可以只包含常量或变量,也可以全部包含,甚至包含字符。

关系运算符

关系运算符包括大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)。这些运算符都是属于双目运算符。运算数可以为变量、常量和表达式。

关系运算符需要注意的是两个运算数的数据类型应一样。否则会进行隐式转换。

转换是不同的数据类型的数值之间的转换。有强制数据类型转换和隐式数据类型转换。一般是小字节的数据向多字节数据转换,如1字节的char转换成2字节的int,这样的转换往往不会改变数值的大小。如果想反着进行,那么就需要进行强制转换。强制转换是可以正反进行,是认为要求的转换;隐式转换是系统自动进行的,一般不能要求反着进行,否则会造成数据带来误差。强制转换的形式是

(要转换成的数据类型)变量或表达式

如(int)n,是将n转换成整型,比int字节少的则数值相等,大的话,如果原先的数值大于int的范围,会出现误差。

关系运算符的运算结果为布尔型,只有真和假之分,即0和1之分。

关系运算符的大于等于和小于等于是大于号或小于号与等号的结合,即先打出大于号或小于号再打出等于号便可以组合成大于等于或小于等于号。与现实中的大于等于或小于等于号不同。

等于号(==)是判断两者是否相等,相等则为真,否则为假。不等于号(!=)是判断两者是否不相等,不相等为真,否则为假。

逻辑运算符

逻辑运算符有逻辑非(!)、逻辑与(&&)、逻辑或(||)。逻辑非属于单目运算符,其余属于双目运算符。运算数可以为变量、常量和表达式。

逻辑非是当运算数不为0是结果为假或0,否则结果为真或1。

逻辑与是只有两个运算数都不为0时,结果才为真或1,否则为假或0。当左边的值为0时,则直接得到结果假或0,右边的表达式不进行任何的计算,尤其是自加自减和赋值运算。

逻辑或是当两个运算数有1个不为0的话,结果为真或1,否则为假或0。当第一个运算数为1或真时,直接得到结果真或1,右边的表达式不进行任何的计算,尤其是自加自减和赋值运算。

位运算符

位运算符有按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、右移(>>)。都属于双目运算符。

其中前四个涉及到运算数的二进制的每一位,使用得比较少。重点讲解后两个。

左移是将左边的运算数的二进制的每一位向左移动右边数的大小,左边高位被移除,右边低位补0。右移是向右移的。

条件运算符

C语言的运算符最高可以达到三目运算,及有三个变量或常量、表达式参与的运算。其形式为

(表达式1)?(表达式2):(表达式3)

因为表达式包括常量与变量,所以这里用表达式表示一般的形式。当表达式1的结果为真时,整个运算的结果为表达式2的值,否则为表达式3的值。

运算符的优先级

正如现实当中的一样,运算符的运算也分先后顺序及优先级。其中括号的优先级最高,其它的可以根据运算结果和现实中的规则一样得出优先顺序。可以看下表,在此不再详解。


如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复

原文发布于微信公众号 - IT界的小白帽(l1084504793)

原文发表时间:2019-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券