小码哥第三天笔记

来源:互联网 发布:手机淘宝店怎么改店名 编辑:程序博客网 时间:2024/05/29 04:17

运算符的概念以及分类

本小节知识点:

  1. 【了解】运算符基本概念
  2. 【理解】运算符分类

1.运算符基本概念

  • 运算符是告诉编译程序执行特定算术或逻辑操作的符号。
    • 例如告诉程序, 某两个数相加, 相减等


2.运算符分类

  • 按照功能划分:

    • 算术运算符
    • 关系运算符与逻辑运算符
    • 按位运算符
  • 运算符根据参与运算的操作数的个数分为

    • 单目运算
      • 单目运算:只有一个操作数 如 : i++ ! sizeof
    • 双目运算
      • 双目运算:有两个操作数 如 : a+b
    • 三目运算
      • 三目预算:C语言中唯一的一个,也称为问号表达式 a>b ? 1 : 0


运算符的优先级以及结合性

本小节知识点:

  1. 【理解】优先级
  2. 【理解】结合性

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. 【掌握】算术运算的注意点

1.算术运算符

名称符号说明加法运算符+双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有左结合性。减法运算符-双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合 性。乘法运算符*双目运算符,具有左结合性。除法运算符/双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型求余运算符 (模运算符)%双目运算符,具有左结合性。要求参与运算的量均为整型,不能应用于float或double 类型。求余运算的结果等于两数相除后的余数,整除时结果为0。
  • 整数除于整数,求出来的结果依然是整数
  • 浮点型赋值给整型会损失小数部分
  • %两侧必须都为整数
  • 利用%求出来的余数是正数还是负数,由%左边的被除数决定,被除数是正数,余数就是正数,反之则反

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. 【理解】求余运算注意事项

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. 【掌握】算术运算中的类型转换

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. 【理解】赋值表达式及赋值语句

1.赋值运算符

+ 简单赋值运算符: =+ 复合赋值运算符: +=、-=、*=、/=、%=

2.赋值表达式

  • 什么是表达式?

    • 将同类型的数据(如常量、变量、函数等),用运算符号按一定的规则连接起来的、有意义 的式子称为表达式。
    • 例如:算术表达式、逻辑表达式、字符表达式等。
  • 表达式的特点:

    • 表达式是一个意义的式子,所以一定有返回值

  • 赋值表达式
    • 由“=”连接的式子称为赋值表达式。
      • 例如: x = a + b;
        • 等号=左边只能是变量,不能是常量,下面的写法是错误的:10 = 10 + 5;
    • 凡是表达式可以出现的地方均可出现赋值表达式
  • 赋值运算符的结合性
    • 赋值运算符具有右结合性, 而且优先级比算术运算符低
      • 例如: int a = 3 + 5; 会先计算3 + 5, 然后再把结果赋值给a
      • 例如: int a = b = c = 5; 右结合性可理解为a=(b=(c=5))

复合运算符

本小节知识点:

  1. 【理解】复合赋值运算符

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. 【了解】自增、自减运算符介绍
  2. 【掌握】自增、自减运算符求值过程
  3. 【了解】练习

1.自增、自减运算符介绍

原创粉丝点击