概述
C语言一共有34种运算符,如下:
运算符分类:
1.按照功能划分:
(1)算术运算符
- + 加法运算符
- - 减法运算符 或者负值运算符
- * 乘法运算符
- / 除法运算符
- % 模运算符,或者取余运算符,要求%两侧均为整形
(2)关系运算符
- < 小于运算符
- <= 小于等于运算符
- > 大于运算符
- >= 大于等于运算符
- == 等于运算符
- != 不等于运算符
(关系运算的结果成立就为“真”==1, 不成立则为“假”==0)
(3)逻辑运算符
- && 逻辑与运算符
- || 逻辑或运算符
- ! 逻辑非运算符
(&按位与 如果两个相应的二进制都为1, 则该位的结果值为1, 否则位0;
| 按位或者两个相应的二进制位 只要有一个为1, 该位的结果值为1;
^ 按位 异或 若参加运算的两个二进制位值相同 则为0, 否则为1;
~ 取反 是一元运算符, 用来对一个二进制数按位取反,即将0变为1,将1 变为 0;
<< 左移用来将一个数的各二进制位全部左移N位,右补0;
>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0)
基本运算
(1)运算符根据参与运算的操作数的个数,分为:
- 单目运算:只有一个操作数, 如:i++;
- 双目运算:有两个操作数, 如a+b;
- 三目运算:也成问号表达式, 如 a > b ? 1 : 0;
(2)优先级:oc中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的 结合性所规定的结合方向处理。(注:只需要记住( )优先级最高即可)
(3)c语言中,各种运算符的结合性分为两种,左结合性(自左向右)和右结合性(自右向左)
- 自左向右,即先左后右:例如表达式:x-y+z, 则y应与“-”号结合,执行x-y 运算,然后再执行+z 运算;
- 自右向左:最典型的右结合性运算符是负值运算符,例如:x=y=z, 由于“=” 的右结合性,应先执行 y=z 再执行 x= (y=z) 运算。
* 整数除于整数,求出来的结果依然是整数
* 浮点型赋值给整型会损失小数部分
* %两侧必须都为整数
* 利用%求出来的余数是正数还是负数,由%左边的被除数决定,被除数是正数,余数就是正数,反之则反
(4)算术运算的注意点
- 自动类型转换, 例如:int b = 10.5 + 1.7;
- 自动将大类型转换为了小类型,会丢失精度 自动类型提升, 例如:int b = 10.5 + 10;
- 将右边的1提升为了double类型,例如:double b = 1.0 / 2;(解决除法的精度问题);
- 强制类型转换, 例如:double a = (double)1 / 2; 其中,错误写法:double b = (double)(1 / 2)
- 求余运算注意事项:参与运算的必须是整数,错误写法:12.3 % 3;m%n 求余,相当于m/n 获取余数;运算结果的正负性取决于第一个运算数,跟后面的运算数无关,例如:10 % -3 = 1
(5)赋值运算符
- 赋值运算符
- 简单赋值运算符: =;
- 复合赋值运算符: +=、-=、*=、/=、%=
-
/= 除后赋值 变量/=表达式 如:a/=3;即a=a/3
*= 乘后赋值 变量*=表达式 如:a*=3;即a=a*3
%= 取模后赋值 变量%=表达式 如:a%=3;即a=a%3
+= 加后赋值 变量+=表达式 如:a+=3;即a=a+3
-= 减后赋值 变量-=表达式 如:a-=3;即a=a-3
-
- 赋值表达式
- 将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义的式子称为表达式。
- 等号=左边只能是变量,不能是常量,下面的写法是错误的:10 = 10 + 5;
(6)自增运算符
在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作?供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。
在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作?供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。
int b;
int a = 10;
b = ++a;//如果++在前代表先自增再参与其它运算
// a = a + 1; b = a;
// a = 11 b = 11
后缀表达式:x++, x--;先用x的当前值作为表达式的值,再进行自增自减1运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化。
int b;
int a = 10;
b = a++;//如果++在后代表先参与其它运算再自增
// b = a; a = a + 1;
// a = 11 b = 10
(7)逗号运算符
- 基本概念用法: 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式。
一般形式形式:表达式1,表达式2,… …,表达式n;
例如:a=a+1,b=3*4;
- 求值过程:表达式1,表达式2,… …,表达式n -----先算表达式1,再算表达式2,依次算到表达式n; 其中 整个逗号表达式的值是最后一个表达式的值
b = (a=4, ++a, a * 7);
// 1.先执行第一个表达式, 将4赋值给a
// 2.再执行第二个表达式, 让a自增变为5
// 3.再执行第三个表达式, 5 * 7
// 4.最后将最后一个表达式的值作为"逗号表达式的值"返回赋值给b, 所以b等于35
- 逗号运算符使用注意:
程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表表达式的值。
(8)sizeof的运算符
- sizeof的运算符的介绍:sizeof的可以用来计算一个变量或一个常量,一种数据类型所占的内存字节数
- 格式:用法:sizeof的(常量/变量)
- 注意:sizeof的不是一个函数,是一个运算符。(面试题)
(9)关系运算符
- 关系运算符的运算结果只有2种:如果条件成立,结果就为1,也就是“真”;如果条件不成立,结果就为0,也就是“假”。
- 关系运算符都是双目运算符,其结合性均为左结合
例如4>3>2:先算4>3,条件成立,结果为1。再与2比较,即1>2,条件不成立,结果为0。
因此4>3>2的结果为0。
- 关系运算符优先级:关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者
例如2==3>1:先算3>1,条件成立,结果为1。再计算2==1,条件不成立,结果为0。
因
此2==3>1的结果为0。
- 关系运算符的优先级小于算术运算符
例如3+4>8-2:先计算3+4,结果为7。再计算8-2,结果为6。最后计算7>6,条件成立,
结果为1。因此3+4>8-2的结果为1。
(10)类型转换问题:
- 类型转换分为:隐式数据类型转换和显示数据类型转换
- 自动转换(隐式转化):
(1)自动转换遵循以下规则: *相同数据类型的值才能进行运算(比如加法运算),而且运算结果依然是同一种数据类 型。系统会自动对占用内存较少的类型做一个“自动类型提升”的操作 *若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 *转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转 成long型后再进行运算。 *所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 *char型和short型参与运算时,必须先转换成int型。 *在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分 按四舍五入向前舍入。
- 强制类型转换(显示转换):
-
强制类型转换是通过类型转换运算来实现的 其一般形式为:(类型说明符) (表达式)
其一般形式为:(类型说明符) (表达式)强制类型转换注意点: (1)将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容 易丢失精度 (2)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则了把x转换成int型之后再与y相加了。 (3)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
(1)将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容 易丢失精度 (2)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则了把x转换成int型之后再与y相加了。 (3)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。参考文章:http://www.jianshu.com/p/141e6af7395e
最后
以上就是搞怪月饼为你收集整理的oc温习二:基本运算及基本运算符的全部内容,希望文章能够帮你解决oc温习二:基本运算及基本运算符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复