小码哥第三天笔记
来源:互联网 发布:手机淘宝店怎么改店名 编辑:程序博客网 时间:2024/05/29 04:17
运算符的概念以及分类
本小节知识点:
- 【了解】运算符基本概念
- 【理解】运算符分类
1.运算符基本概念
- 运算符是告诉编译程序执行特定算术或逻辑操作的符号。
- 例如告诉程序, 某两个数相加, 相减等
2.运算符分类
按照功能划分:
- 算术运算符
- 关系运算符与逻辑运算符
- 按位运算符
运算符根据参与运算的操作数的个数分为
- 单目运算
- 单目运算:只有一个操作数 如 : i++ ! sizeof
- 双目运算
- 双目运算:有两个操作数 如 : a+b
- 三目运算
- 三目预算:C语言中唯一的一个,也称为问号表达式 a>b ? 1 : 0
- 单目运算
运算符的优先级以及结合性
本小节知识点:
- 【理解】优先级
- 【理解】结合性
1.优先级
- C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的 结合性所规定的结合方向处理。
江哥提示:一般情况下不需要死记硬背优先级, 只需要记住()优先级最高即可
2.结合性
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
算术运算符的结合性是自左至右,即先左后右。
例如表达式: x-y+z则y 应先与“-”号结合,执行 x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。
而自右至左 的结合方向称为“右结合性”。
最典型的右结合 性运算符是赋值运算符例如:如x=y=z由于“=”的 右结合性,应先执行y=z 再执行x=(y=z)运算。
算术运算符
本小节知识点:
- 【理解】算术运算符
- 【掌握】结合性和优先级
- 【掌握】算术运算的注意点
1.算术运算符
- 整数除于整数,求出来的结果依然是整数
- 浮点型赋值给整型会损失小数部分
- %两侧必须都为整数
- 利用%求出来的余数是正数还是负数,由%左边的被除数决定,被除数是正数,余数就是正数,反之则反
2.结合性和优先级
- 结合性:从左到右
- 优先级:
- * / % 优先级 大于 + -
- 优先级相同则左结合计算
3*5/3+18先算3*5然后再算除3最后结果再+18
3.算术运算的注意点
1.自动类型转换
int a = 10.6;int b = 10.5 + 1.7;
2.自动将大类型转换为了小类型,会丢失精度 自动类型提升
int b = 10.5 + 10;
3.将右边的1提升为了double类型
double b = 1.0 / 2;解决除法的精度问题
4.强制类型转换
double a = (double)1 / 2;double b = (double)(1 / 2);// 错误写法
求余运算符
- 【理解】求余运算注意事项
1.求余运算注意事项
- 参与运算的必须是整数
10 % 2 = 0因为 10 可以被2整除, 没有余数10 % 3 = 1因为 10除以3余1, 所以结果为1
- 错误写法
12.3 % 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
运算结果的正负性取决于第一个运算数,跟后面的运算数无关
10 % 3 = 1-10 % 3 = -110 % -3 = 1
类型转换问题
本小节知识点:
- 【掌握】算术运算中的类型转换
1.类型转换问题
- 类型转换分为:
- 隐式数据类型转换
- 显示数据类型转换
- 自动转换(隐式转换):
- 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。
- 自动转换遵循以下规则:
- 相同数据类型的值才能进行运算(比如加法运算),而且运算结果依然是同一种数据类型。系统会自动对占用内存较少的类型做一个“自动类型提升”的操作
- 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
- 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转 成long型后再进行运算。
- 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成 double型,再作运算。
- char型和short型参与运算时,必须先转换成int型。
- 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分 按四舍五入向前舍入。
double ↑ long ↑unsigned ↑ int ↑char|short
例如:int i = 1;i = i + 8.808printf("%d", i);输出结果: 9按照隐式处理方式,在处理i = i + 8.808时首先i转换为double型,然后进行相加,结果为double 型,再将double型转换为整型赋给i
- 强制类型转换(显示转换):
- 强制类型转换是通过类型转换运算来实现的
- 其一般形式为:(类型说明符) (表达式)
(float) a; /* 把a转换为实型 */(int)(x+y); /* 把x+y的结果转换为整型 */
- 其一般形式为:(类型说明符) (表达式)
int i = 1;i = i + (int)8.808printf("%d", i);输出结果: 9这时直接将8.808转换成整型,然后与i相加,再把结果赋给i。其实: 这样可把二次转换简化为一次转换。int i = 1;i = (int)(i + 8.808)printf("%d", i);或者让系统隐式转换int i = 1;i = i + 8.808printf("%d", i);
- 强制类型转换注意点
- 将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容易丢失精度
- 类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。
- 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
float floatValue = 10.1f;int sum = 4 + (int)floatValue ;printf("sum = %d", sum);// 输出14// floatValue本身的值并没有改变printf("floatValue = %f", floatValue); // 输出10.100000
赋值运算符
本小节知识点:
- 【掌握】赋值运算符
- 【理解】赋值表达式及赋值语句
1.赋值运算符
+ 简单赋值运算符: =+ 复合赋值运算符: +=、-=、*=、/=、%=
2.赋值表达式
什么是表达式?
- 将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义 的式子称为表达式。
- 例如:算术表达式、逻辑表达式、字符表达式等。
表达式的特点:
- 表达式是一个意义的式子,所以一定有返回值
- 赋值表达式
- 由“=”连接的式子称为赋值表达式。
- 例如: x = a + b;
- 等号=左边只能是变量,不能是常量,下面的写法是错误的:10 = 10 + 5;
- 例如: x = a + b;
- 凡是表达式可以出现的地方均可出现赋值表达式
- 由“=”连接的式子称为赋值表达式。
- 赋值运算符的结合性
- 赋值运算符具有右结合性, 而且优先级比算术运算符低
- 例如: int a = 3 + 5; 会先计算3 + 5, 然后再把结果赋值给a
- 例如: int a = b = c = 5; 右结合性可理解为a=(b=(c=5))
- 赋值运算符具有右结合性, 而且优先级比算术运算符低
复合运算符
本小节知识点:
- 【理解】复合赋值运算符
1.复合赋值运算符
- 在赋值符“=”之前加上其它二目运算符可构成复合赋值符。
- /= 除后赋值 变量/=表达式 如: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
构成复合赋值表达式的一般形式为:变量 双目运算符 = 表达式; 如: a *= 1 + 2;它等效于变量 = 变量 双目运算符 表达式; 如: a = (1 + 2) * a;
- 注意:赋值运算符优先级排名14位,仅仅高于“,”运算符。
自增运算符
本小节知识点:
- 【了解】自增、自减运算符介绍
- 【掌握】自增、自减运算符求值过程
- 【了解】练习
1.自增、自减运算符介绍
- 在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作 0 0
- 小码哥第三天笔记
- 第三天:听课笔记
- 第十三天:听课笔记
- HTML第三天笔记
- oracle第三天笔记
- oracle 笔记第三天
- 第三天学习笔记
- javascript第三天笔记
- 第三天学习笔记
- 第十三天学习笔记
- 第三十三天学习笔记
- 第五十三天学习笔记
- 第七十三天学习笔记
- 安卓实训笔记第三天
- java 第三天笔记
- Struts2笔记第三天
- 学习笔记第三天
- thinkphp5 笔记第三天
- DNS的查找机制、中文扩展,及其对手机扫描商标名称的支持
- vs2013 以上的实用小功能-将xml,json自动转换为class
- PAT 1002. A+B for Polynomials
- adb shell:fail to startdeamon
- JAX-WS开发的webservice如何在Tomcat下发布
- 小码哥第三天笔记
- Eclipse搭建Spring环境
- webservice获取客户端IP地址
- 友盟分享
- PAT 1003. Emergency
- 6.5-6
- 每天一个Linux命令-3( ls和 ll )
- 待解决和深究问题
- Spring整合JAX-WS