C语言运算符

来源:互联网 发布:acii转换为hex单片机 编辑:程序博客网 时间:2024/05/13 03:38

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------




取余运算

%

 

参与运算的必须是整数 10%2 20%3

注意:

m%n 求余,相当于m/n 获取余数

(1)n等于0 无意义

(2)m等于0 结果为0

(3)m>n 正常求余 如:8%3= 2

(4)m<n 结果是m 如:2%4= 2 1%4 = 1 3%8=3

2)运算结果的正负性取决于第一个运算数,跟后面的运算数无关

 

 

算术运算中类型转换问题

类型转换分为:隐式数据类型转换和 显示数据类型转换

1)自动转换(隐式转换):

自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:

1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转 成long型后再进行运算。3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成 double型,再作运算。

4)char型和short型参与运算时,必须先转换成int型。5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分 按四舍五入向前舍入。

 

 

 

2)强制类型转换(显示转换):

强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符) (表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

(float) a; /* 把a转换为实型*/

(int)(x+y); /*把x+y的结果转换为整型 */

显示类型转换的方法是在被转换对象(或表达式)前加类型标识符,其格式是:(类型标识符)表达式

 

在使用强制转换时应注意以下问题:

1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。

 

 

 

表达式语句一定有返回值

 

思考&实现:

分析这句代码:int a=b=c=d=10; 是否正确?为什么?

应该是不正确的因为赋值语句是从右向左的顺序结合,题目中只定义的a,却没有定义b,c,d没有定义的变量是不能使用的。


 

自增自减的时候,注意变量的值和表达式的值的变化不同,分清楚表达式的式的与变量值的变化关系。

优先级

优先级是第2级

 

右结合

编译器对程序编译时,从右到左可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;

注意:不管“++”在前还是在后,最后变量的值都会+1

 

 

 

sizeof运算符

用法:sizeof(常量/变量)

sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小 由操作数的类型决定。

注意:sizeof()不是一个函数,而是一个运算符。

 

//当sizeof后面的操作数是常量或是变量那么后面小阔号是可以省略的

 

 

 

逻辑运算符

 

 

逻辑运算符的短路问题

与短路:&&只要第一个条件表达为假那么后面的条件表达就不参与运算了 或短路:|| 只要第一个条件表达式为真那么后面的条件表达式就不参与运算了

 

优先级和结合性的表格,一会上图



0 0
原创粉丝点击