运算符的优先级和结合性-8页word资料
- 格式:doc
- 大小:22.50 KB
- 文档页数:8
c语言运算顺序C语言是一种广泛应用的计算机编程语言,其运算顺序是C语言程序员需要熟知的基础知识之一。
在C语言程序中,运算顺序是指在表达式中各个操作符的计算顺序。
不同的操作符具有不同的优先级和结合性,因此在表达式中需要按照一定的规则进行计算。
本文将详细介绍C语言运算顺序的相关知识。
1. 运算符优先级在C语言中,运算符的优先级是指在表达式中各个操作符的计算顺序。
C语言中的运算符按照优先级从高到低排列,优先级越高的运算符越先进行计算。
以下是C语言中常用的运算符优先级(由高到低):运算符t优先级()t最高++、--(前缀)t+、-(一元运算符)t!、~、++、--(后缀)t*、/、%t+、-(二元运算符)t<<、>>t<、<=、>、>=t==、!=t&t^t|t&&t||t:t最低在表达式中,如果有多个运算符,优先级高的运算符先计算。
如果优先级相同,则按照结合性进行计算。
2. 运算符结合性在C语言中,运算符的结合性是指在表达式中多个相同优先级的运算符计算时,先计算哪个运算符。
C语言中的运算符有左结合、右结合和无结合三种。
左结合是指从左到右进行计算的运算符,例如“+”和“-”运算符。
例如,表达式a+b-c中,先进行a+b的计算,再进行-c的计算。
右结合是指从右到左进行计算的运算符,例如“=”运算符和“++”和“--”运算符。
例如,表达式a=b=c中,先进行b=c的计算,再进行a=b的计算。
无结合是指不能同时出现多个相同优先级的运算符,例如“?:”运算符。
例如,表达式a>b?c:d中,先进行a>b的判断,再根据结果选择c或d进行计算。
3. 运算符的副作用C语言中的一些运算符具有副作用,即在计算过程中会改变变量的值。
例如,赋值运算符“=”就具有副作用,它会将右侧的值赋给左侧的变量。
自增和自减运算符“++”和“--”也具有副作用,它们会将变量的值加1或减1。
c语言的算术运算符优先级摘要:1.概述C 语言算术运算符优先级2.算术运算符的分类3.算术运算符的优先级规则4.结合性和关联性5.运算符的转换和计算顺序正文:C 语言作为一门广泛应用的编程语言,其算术运算符的优先级和结合性对于编程者来说十分重要。
本文将详细介绍C 语言算术运算符的优先级及其相关规则。
首先,我们需要了解C 语言中的算术运算符。
C 语言中的算术运算符主要包括以下几类:1.一元运算符:例如+、-、++、--等,用于对一个变量进行自增或自减操作。
2.二元运算符:例如+、-、*、/、%等,用于对两个变量进行加、减、乘、除、取模等运算。
接下来,我们来介绍一下C 语言算术运算符的优先级规则。
在C 语言中,算术运算符的优先级从高到低依次为:1.单目运算符:如++、--等,它们的优先级最高。
2.乘法和除法运算符:如*、/等,它们的优先级高于加法和减法运算符。
3.加法和减法运算符:如+、-等,它们的优先级相对较低。
需要注意的是,算术运算符的优先级还受到结合性的影响。
结合性是指运算符在表达式中的结合方式,分为左结合和右结合两种。
在C 语言中,算术运算符的结合性为从左到右。
也就是说,当表达式中出现多个算术运算符时,它们将从左到右依次进行运算。
此外,在实际运算过程中,运算符的转换和计算顺序也是需要关注的。
C 语言中,运算符的转换和计算顺序遵循“括号、乘除、加减”的规则。
即先计算括号内的运算,然后进行乘除运算,最后进行加减运算。
综上所述,C 语言算术运算符的优先级和结合性对于编程者来说十分重要。
运算符号的优先级别结合性有两种,⼀种是⾃左⾄右,另⼀种是⾃右⾄左,⼤部分运算符的结合性是⾃左⾄右,只有单⽬运算符、三⽬运算符的赋值运算符的结合性⾃右⾄左。
优先级有15种。
记忆⽅法如下:记住⼀个最⾼的:构造类型的元素或成员以及⼩括号。
记住⼀个最低的:逗号运算符。
剩余的是⼀、⼆、三、赋值。
意思是单⽬、双⽬、三⽬和赋值运算符。
在诸多运算符中,⼜分为:算术、关系、逻辑。
两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前⾯。
再细分如下:算术运算符分 *,/,%⾼于+,-。
关系运算符中,》,》=,《,〈=⾼于==,!=。
逻辑运算符中,除了逻辑求反(!)是单⽬外,逻辑与(&&)⾼于逻辑或(||)。
逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)⾼于按位半加(^),⾼于按位或(|)。
这样就将15种优先级都记住了,再将记忆⽅法总结如下:去掉⼀个最⾼的,去掉⼀个最低的,剩下的是⼀、⼆、三、赋值。
双⽬运算符中,顺序为算术、关系和逻辑,移位和逻辑位插⼊其中。
为什么后缀++⽐*操作符优先级⾼却后对p加1?” ——*p++、*++p、++*p和(*p)++中的操作符优先级问题假设int a[10]p1=a;那么*p++=1;*++p=2;++*p=3;(*p)++=4;分别应该怎么按照优先级别运算?按照书上的说法++ (后置) >++(前置) >* 解引⽤⽤ > = 等于*p++ 是否应该是现算(p++) 在算* 最后赋值?求所有的正确的算法和解答---------------------------------------------------------------++(后缀)属于“后缀操作符”,其优先级⾼于“前缀操作符”。
* 和++(前缀)都属于“前缀操作符”,优先级相同,按从左到右结合的顺序。
都⾼于赋值运算符。
所以:*p++=1 相当于 (*(p++)) = 1,也就是说++操作于p上,结果为p原来的值,再作*运算,去除引⽤,再赋为1。
c/c++运算符的优先级和结合性内容导读:遍历了15个级别之后,让我们再来总结一下。
其中我们可以看出这样两个规律:规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符; 规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算...遍历了15个级别之后,让我们再来总结一下。
其中我们可以看出这样两个规律:规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符;规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算符,位移运算符,关系运算符,位运算符,逻辑运算符,赋值运算符。
此外还有两特别的地方需要注意:一、同为关系运算符,但==和!=的级别低于其它四个;二、第2组与第13组的操作符是右结合的,其它的都为左结合;通过分类我们大大减少了需要记忆的内容,遇到使用操作符的时候,我们只需想想它们是什么类型的运算符就可以确定它们之间的相对优先级,从而避免一些不必要的错误。
====================================================================== ===================提起运算符的优先级,很多了解c++的过来人都会想:这有什么难的?不就是谁的优先级高就算谁么。
确实如此,运算符的优先级不是一个大问题,但对于一个初学者来说,却经常容易在上面迷糊与犯错。
而对于一个了解c++的人来说,我相信也会偶尔在上面摔倒,不信就继续往下读。
“优先级高的先运算”带来的困惑c++中运算符的优先级有一张表,表里把运算符进行了分类,这张表是不需要死记硬背的,只要有个大致的轮廓就ok了。
例如应该记住最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。
而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算),算术运算符的优先级高于关系运算符,象++和﹣﹣的优先级比前面几个都高,但最高的要属()了。
c语言运算法优先级C语言是一种广泛使用的编程语言,它具有强大的计算能力和丰富的运算符号。
在C语言中,运算符号的优先级非常重要。
合理运用优先级可以使我们的代码更加简洁和高效,减少出错的可能性。
本文将详细介绍C语言的运算符号优先级,希望能给读者带来指导意义。
首先我们来了解一下C语言中的运算符号。
C语言中的运算符号可以分为以下几类:1.算术运算符号:+,-,*,/,%,++,--。
2.关系运算符号:==,!=,>,<,>=,<=。
3.逻辑运算符号:&&,||,!。
4.位运算符号:&,|,^,~,<<,>>。
5.赋值运算符号:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=。
6.其他运算符号:sizeof,&,*,?:,(),[],->,.,...。
接下来我们来详细了解一下这些运算符号的优先级。
1.算术运算符号的优先级算术运算符号分为一元运算符和二元运算符。
一元运算符包括++和--,而二元运算符则包括+,-,*,/和%。
一元运算符的优先级最高,其次是乘、除和取余,再次是加、减。
而对于同级别的符号,C语言遵循从左到右的计算顺序。
当一元运算符和二元运算符混在一起时,一元运算符优先级仍然最高。
2.关系运算符号的优先级关系运算符号的优先级较低,而在关系运算符号中,等于和不等于的优先级最低。
所以在编写代码时,应该避免使用==和!=作为条件表达式的最后符号,避免出现优先级问题导致的语法错误。
3.逻辑运算符号的优先级逻辑运算符号中,逻辑非(!)的优先级最高,其次是逻辑与(&&),最后是逻辑或(||)。
在逻辑符号中,&&和||具有短路功能,即如果前面的表达式已经可以判断结果,后面的表达式就不会再进行计算。
4.位运算符号的优先级位运算符号中,一元反码(~)的优先级最高,其次是左移(<<),右移(>>),位与(&),位异或(^)和位或(|)。
附录C C语言运算符优先级和结合性优先级运算符含义运算类型结合性1()[ ]->,圆括号下标运算符指向结构体成员运算符结构体成员运算符单目自左向右2!~++ --(类型关键字)+ -*&sizeof逻辑非运算符按位取反运算符自增、自尖运算符强制类型转换正、负号运算符指针运算符地址运算符长度运算符单目自右向左3* / %乘、除、求余运算符双目自左向右4+ -加、减运算符双目自左向右5<<>>左移运算符右移运算符双目自左向右6< <= > >=小于、大于、小于等于、大于等于关系自左向右7= = !=等于、不等于关系自左向右8&按位与运算符位运算自左向右9^按位异或运算符位运算自左向右10|按位或运算符位运算自左向右11&&逻辑与运算符位运算自左向右12||逻辑或运算符位运算自左向右13? :条件运算符三目自右向左14= += -= *=/= %=<< = >>=&= ^= |=赋值运算符双目自右向左15,逗号运算顺序自左向右附录B C语言主要关键字及其用途类别关键字用途数据类型constchardoublefloatintlongshortsignedunsignedstruct定义符号常量定义字符型变量定义双精度实型变量定义单精度实型变量定义整型变量定义长整型变量定义短整型变量定义有符号整型变量定义无符号整型变量定义结构类型变量union enum void volatile typedef 定义联合类型变量定义枚举类型变量定义空类型定义可被隐藏变量自定义数据类型流程控制breakcasecontinuedefaultdoelseforgotoifreturnswitchwhile退出循环结构或switch结构用于switch结构中的情况选择结束本轮循环,开始下一轮循环用于switch结构中的否则情况选择do-while型循环的入口语句if语句中的否则分支选择for型循环的入口语句无条件语句if语句的入口语句返回到调用函数switch结构的入口语句while型循环的入口语句或do-while型循环的出口语句存储模式autoexternregisterstaticfarnearhuge自动存储外部存储寄存器存储静态存储定义跨段远程指针定义跨段近程指针定义跨段特大指针运算符sizeof计算指定类型或表达式的字节数成绩输入的优良差!#include<stdio.h>void main(){float c;scanf("%f",&c);printf("\n请输入学生成绩: \n");if(c<60)printf("\n差\n");elseif(c>=60&&c<=79)printf("\n中\n"); elseif(c>=80&&c<=89)printf("\n良\n"); elseif(c>=90)printf("\n优\n"); }。
下面是C语言中所使用的运算符的优先级和结合性:优先级运算符结合性(最高) () [] -> . 自左向右! ~ ++ -- + - * & sizeof 自右向左* / % 自左向右+ - 自左向右<< >> 自左向右< <= > >= 自左向右== != 自左向右& 自左向右^ 自左向右| 自左向右&& 自左向右|| 自左向右?: 自右向左= += -= *= /= %= &= ^= |= <<= >>= 自右向左(最低) , 自左向右还有指针运算符、sizeof运算符、数组运算符[]等等一、赋值运算符赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。
符号为‘=’。
这里并不是等于的意思,只是赋值,等于用‘==’表示。
注意:赋值语句左边的变量在程序的其他地方必须要声明。
得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。
常数只能作为右值。
例如:count=5;total1=total2=0;第一个赋值语句大家都能理解。
第二个赋值语句的意思是把0同时赋值给两个变量。
这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。
这样它先total2=0;然后total1=total2;那么我们这样行不行呢?(total1=total2)=0;这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。
二、算术运算符在C语言中有两个单目和五个双目运算符。
符号功能+ 单目正- 单目负* 乘法/ 除法% 取模+ 加法- 减法下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符:Area=Height*Width;num=num1+num2/num3-num4;运算符也有个运算顺序问题,先算乘除再算加减。
Java中的运算符和各种运算符的优先级和结合性及注意事项整理(1)算术运算符Java运算符算术运算符代数表达式Java表达式加+a+1a+1减-a-b a-b乘*ab a*b除/a/b a/b求模/余% a mod b a%b注意:1>Java 中没有求幂的算术运算符2>Java 中没有表⽰指数运算的运算符(2)等式和关系运算符代数等式和关系运算符Java等式或关系运算符Java条件表达式⽰例Java条件表达式含义等式运算符===a==b a等于b≠!=a!=b a不等于b关系运算符>>a>b a⼤于b<<a<b a⼩于b≥>=a>=b a⼤于等于b≤<=a<=b a⼩于等于b注意:1>不能将相等运算符“==”与赋值运算符“=”混为⼀谈,会导致逻辑错误或者语法错误。
2>由两个符号组成的运算符中,两个符号之间不能出现空格,否则,将会产⽣语法错误。
(3)复合赋值运算符Java中提供了⼏个复合赋值运算符,⽤以简化赋值运算表达式。
任何⼀种类似于下⾯形式的表达式:变量 = 变量运算符表达式;其中,运算符可以是⼆元运算符+,-,*,/和%以及其它运算符中的某⼀个,都可以转换成下⾯这种形式:变量运算符 = 表达式;例,下⾯为算术赋值运算符赋值运算符⽰例表达式说明赋值操作+= c = 3,c += 7 c = c + 7将10赋给c-= d = 5,d -= 4 d = d - 4将1赋给d*= e = 4,e *= 5 e = e * 5将20赋给e/= f = 6,f /= 3 f = f / 3将2赋给f%=g = 12,g %= 9g = g % 9将3赋给g(4)⾃增和⾃减运算符Java提供了两个⼀元运算符⼀元⾃增运算符“++”和⼀元⾃减运算符“--”,⽤于在⼀个数字变量上加1和减1。
⾃增(或⾃减)运算符放在变量的前⾯,相应的称之为前⾃增(或前⾃减)运算符。
计算机中的算术运算与优先级计算机是一种强大而复杂的工具,它能够执行各种数学运算,其中包括算术运算。
在计算机中进行算术运算需要遵循一定的规则和优先级,这样才能保证计算的准确性和一致性。
本文将介绍计算机中的算术运算与优先级,并分析其在计算过程中的重要性。
一、算术运算的基本概念算术运算是指对数值进行加、减、乘、除等数学运算。
在计算机中,常见的算术运算符包括加法运算符(+)、减法运算符(-)、乘法运算符(*)和除法运算符(/),它们分别用来执行相应的运算操作。
二、算术运算的规则在进行算术运算时,需要遵循一定的规则,以确保计算结果的准确性。
以下是常见的算术运算规则:1. 加法和乘法运算满足交换律和结合律。
即a + b = b + a,a * b = b* a,(a + b) + c = a + (b + c),(a * b) * c = a * (b * c)。
2. 减法和除法不满足交换律和结合律。
即a - b ≠ b - a,a / b ≠ b / a,(a - b) - c ≠ a - (b - c),(a / b) / c ≠ a / (b / c)。
3. 加法和乘法运算满足分配律。
即a * (b + c) = a * b + a * c。
4. 除法运算要注意被除数不能为0,否则将出现除以0的错误。
三、算术运算的优先级在计算机中,不同的算术运算符具有不同的优先级。
优先级高的运算符会先于优先级低的运算符执行。
以下是常见算术运算符的优先级从高到低的顺序:1. 括号:用于控制运算的优先级,括号内的运算会首先执行。
2. 乘法和除法:乘法和除法运算具有相同的优先级,按照从左到右的顺序执行。
3. 加法和减法:加法和减法运算具有相同的优先级,按照从左到右的顺序执行。
举例来说,对于表达式3 + 5 * 2,根据乘法优先级高于加法,先执行5 * 2得到10,然后再与3相加,最终的结果是13。
四、算术运算的应用算术运算在计算机中广泛应用于各个领域。
C语言运算符分类1级优先级(左结合)() 圆括号;[]下标运算符;->指向结构体成员运算符;. 结构体成员运算符。
2级优先级(右结合)!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符。
3级优先级(左结合)*乘法运算符;/除法运算符;%取余运算符。
4级优先级(左结合)+加法运算符;-减法运算符。
5级优先级(左结合)<<左移运算符;>>右移运算符。
6级优先级(左结合)<、<=、>、>=关系运算符。
7级优先级(左结合)==等于运算符;!=不等于运算符。
8级优先级(左结合)&按位与运算符。
9级优先级(左结合)^按位异或运算符。
10级优先级(左结合)|按位或运算符。
11级优先级(左结合)&&逻辑与运算符。
12级优先级(左结合)||逻辑或运算符。
13级优先级(右结合)? :条件运算符。
14级优先级(右结合)=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
15级优先级(左结合),逗号运算符。
运算符优先级与结合性运算符的优先级:C语言中,运算符的运算优先级共分为15 级。
1 级最高,15 级最低。
在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
例如算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。
这种自左至右的结合方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。
C语言运算符优先级表C语言运算符优先级表同一优先级的运算符,运算次序由结合方向所决定。
说明:简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符C语言运算符运算优先级运算符的种类C语言的运算符可分为以下几类:1.算术运算符用于各类数值运算。
包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.关系运算符用于比较运算。
包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
3.逻辑运算符用于逻辑运算。
包括与(&&)、或(||)、非(!)三种。
4.位操作运算符参与运算的量,按二进制位进行运算。
包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符这是一个三目运算符,用于条件求值(?:)。
7.逗号运算符用于把若干表达式组合成一个表达式(,)。
8.指针运算符用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符用于计算数据类型所占的字节数(sizeof)。
10.特殊运算符有括号(),下标[],成员(→,.)等几种。
优先级和结合性C语言中,运算符的运算优先级共分为15级。
1级最高,15级最低。
在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
例如算术运算符的结合性是自左至右,即先左后右。
C语言运算规则C语言作为一种广泛应用于软件开发和系统编程的编程语言,具有严格的运算规则。
了解和掌握这些规则对于编写高效且功能正确的程序至关重要。
本文将介绍C语言中常见的运算规则,包括基本运算符、运算符优先级、运算符结合性、类型转换以及溢出问题等。
一、基本运算符在C语言中,常见的基本运算符包括算术运算符、关系运算符、逻辑运算符和位运算符等。
它们分别用于执行加法、减法、乘法、除法、取模等算术运算;比较操作数之间的大小关系;实现逻辑与、逻辑或、逻辑非等逻辑操作;以及对二进制位进行移位、与、或、异或等位运算。
二、运算符优先级和结合性在C语言中,运算符的优先级决定了运算的顺序。
例如,乘法和除法的优先级高于加法和减法,因此会先执行乘法和除法运算。
此外,括号可以改变运算符的优先级,括号中的表达式将首先被计算。
此外,C语言还存在一元运算符和二元运算符。
一元运算符只需要一个操作数,例如取反运算符"!";而二元运算符需要两个操作数,例如加法运算符"+"。
三、类型转换在C语言中,如果两个运算数的类型不一致,那么进行运算时会进行类型转换。
C语言中的类型转换包括隐式类型转换和显式类型转换。
隐式类型转换是指在运算过程中,编译器自动将一个类型的操作数转换为另一种类型,以匹配运算符的要求。
例如,在一个算术运算中,如果一个操作数为整型,另一个操作数为浮点型,那么整型会被隐式转换为浮点型进行运算。
显式类型转换是在代码中通过使用强制类型转换运算符来实现的。
通过显式类型转换,我们可以将一个类型的值转换为另一种类型的值。
四、溢出问题在C语言中,由于数据类型的范围是有限的,进行某些运算可能导致溢出问题。
溢出是指计算结果超出了所能表示的数据类型能够容纳的范围。
例如,当整型变量的值超出了其数据类型能够容纳的最大值时,将发生溢出。
C语言中的溢出问题需要程序员在编写代码时进行处理,以避免可能引发错误的结果。
c 语言符号优先级
在C语言中,不同运算符有不同的优先级。
下面是常见的C语言运算符的优先级从高到低的顺序:
1. 圆括号:()
2. 单目运算符:++ -- ! ~ + -(正负号)*(取值)&(取地址)
3. 乘除模运算符:* / %
4. 加减运算符:+ -
5. 移位运算符:<< >>
6. 关系运算符:> >= < <=
7. 相等运算符:== !=
8. 按位与运算符:&
9. 按位异或运算符:^
10. 按位或运算符:|
11. 逻辑与运算符:&&
12. 逻辑或运算符:||
13. 条件运算符:?:
14. 赋值运算符:= += -= *= /= %= <<= >>= &= ^= |=
15. 逗号运算符:,
需要注意的是,优先级高的运算符会先被计算,而优先级相同的运算
符则按照结合性从左到右计算。
如果不确定运算符的优先级,可以使用括号来明确表达式的计算顺序。
下面是C语言中所使用的运算符的优先级和结合性:优先级运算符结合性(最高) () [] -> . 自左向右! ~ ++ -- + - * & sizeof 自右向左* / % 自左向右+ - 自左向右<< >> 自左向右< <= > >= 自左向右== != 自左向右& 自左向右^ 自左向右| 自左向右&& 自左向右|| 自左向右?: 自右向左= += -= *= /= %= &= ^= |= <<= >>= 自右向左(最低) , 自左向右还有指针运算符、sizeof运算符、数组运算符[]等等一、赋值运算符赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。
符号为‘=’。
这里并不是等于的意思,只是赋值,等于用‘==’表示。
注意:赋值语句左边的变量在程序的其他地方必须要声明。
得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。
常数只能作为右值。
例如:count=5;total1=total2=0;第一个赋值语句大家都能理解。
第二个赋值语句的意思是把0同时赋值给两个变量。
这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。
这样它先total2=0;然后total1=total2;那么我们这样行不行呢?(total1=total2)=0;这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。
二、算术运算符在C语言中有两个单目和五个双目运算符。
符号功能+ 单目正- 单目负* 乘法/ 除法% 取模+ 加法- 减法下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符:Area=Height*Width;num=num1+num2/num3-num4;运算符也有个运算顺序问题,先算乘除再算加减。
单目正和单目负最先运算。
取模运算符(%)用于计算两个整数相除所得的余数。
例如:a=7%4;最终a的结果是3,因为7%4的余数是3。
那么有人要问了,我要想求它们的商怎么办呢?b=7/4;这样b就是它们的商了,应该是1。
也许有人就不明白了,7/4应该是1.75,怎么会是1呢?这里需要说明的是,当两个整数相除时,所得到的结果仍然是整数,没有小数部分。
要想也得到小数部分,可以这样写7.0/4或者7/4.0,也即把其中一个数变为非整数。
那么怎样由一个实数得到它的整数部分呢?这就需要用强制类型转换了。
例如:a=(int) (7.0/4);因为7.0/4的值为1.75,如果在前面加上(int)就表示把结果强制转换成整型,这就得到了1。
那么思考一下a=(float) (7/4);最终a的结果是多少?单目减运算符相当于取相反值,若是正值就变为负值,若是负数就变为正值。
单目加运算符没有意义,纯粹是和单目减构成一对用的。
三、逻辑运算符逻辑运算符是根据表达式的值来返回真值或是假值。
其实在C语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。
符号功能&& 逻辑与|| 逻辑或! 逻辑非例如:5!3;0||-2&&5;!4;当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。
当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。
逻辑非(!)运算是把相应的变量数据转换为相应的真/假值。
若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。
还有一点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。
例如:a=2,b=1;a||b-1;因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。
四、关系运算符关系运算符是对两个表达式进行比较,返回一个真/假值。
符号功能> 大于< 小于>= 大于等于<= 小于等于== 等于!= 不等于这些运算符大家都能明白,主要问题就是等于==和赋值=的区别了。
一些刚开始学习C语言的人总是对这两个运算符弄不明白,经常在一些简单问题上出错,自己检查时还找不出来。
看下面的代码:if(Amount=123) ……很多新人都理解为如果Amount等于123,就怎么样。
其实这行代码的意思是先赋值Amount=123,然后判断这个表达式是不是真值,因为结果为 123,是真值,那么就做后面的。
如果想让当Amount等于123才运行时,应该if(Amount==123) ……五、自增自减运算符这是一类特殊的运算符,自增运算符++和自减运算符--对变量的操作结果是增加1和减少1。
例如:--Couter;Couter--;++Amount;Amount++;看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。
运算符放在变量前面,那么在运算之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加表达式的运算后再运算。
这样讲可能不太清楚,看下面的例子:num1=4;num2=8;a=++num1;b=num2++;a =++num1;这总的来看是一个赋值,把++num1的值赋给a,因为自增运算符在变量的前面,所以num1先自增加1变为5,然后赋值给a,最终a也为5。
b=num2++;这是把num2++的值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2自增加1变为 9。
那么如果出现这样的情况我们怎么处理呢?c=num1+++num2;到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定,不同的编译器可能有不同的结果。
所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。
六、复合赋值运算符在赋值运算符当中,还有一类C/C++独有的复合赋值运算符。
它们实际上是一种缩写形式,使得对变量的改变更为简洁。
Total=Total+3;乍一看这行代码,似乎有问题,这是不可能成立的。
其实还是老样子,'='是赋值不是等于。
它的意思是本身的值加3,然后在赋值给本身。
为了简化,上面的代码也可以写成:Total+=3;复合赋值运算符有下列这些:符号功能+= 加法赋值-= 减法赋值*= 乘法赋值/= 除法赋值%= 模运算赋值<<= 左移赋值>>= 右移赋值&= 位逻辑与赋值|= 位逻辑或赋值^= 位逻辑异或赋值上面的十个复合赋值运算符中,后面五个我们到以后位运算时再说明。
那么看了上面的复合赋值运算符,有人就会问,到底Total=Total+3;与Total+=3;有没有区别?答案是有的,对于A=A+1,表达式A被计算了两次,对于复合运算符A+=1,表达式A仅计算了一次。
一般的来说,这种区别对于程序的运行没有多大影响,但是当表达式作为函数的返回值时,函数就被调用了两次(以后再说明),而且如果使用普通的赋值运算符,也会加大程序的开销,使效率降低。
七、条件运算符条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回两外两个表达式中的一个。
<表达式1>?<表达式2>:<表达式3>在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
例如:a=(b>0)?b:-b;当b>0时,a=b;当b不大于0时,a=-b;这就是条件表达式。
其实上面的意思就是把b的绝对值赋值给a。
八、逗号运算符在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
假设b=2,c=7,d=5,a1=(++b,c--,d+3);a2=++b,c--,d+3;对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a=8。
对于第二行代码,那么也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=3。
还有其他的如位逻辑运算符,位移运算符等等,我们等到讲位运算时再说明。
九、优先级和结合性从上面的逗号运算符那个例子可以看出,这些运算符计算时都有一定的顺序,就好象先要算乘除后算加减一样。
优先级和结合性是运算符两个重要的特性,结合性又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算。