c语言-操作符详解

操作符详解

操作符

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用,函数调用,结构成员

算术操作符

  • 加 减 乘 除 取余
  • c语言-操作符详解_第1张图片
    c语言-操作符详解_第2张图片
  • 1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数
  • 2.对于/操作符必须为整数,执行整数除法,而只要有浮点数执行的就是浮点整除
  • 3.%操作符的两个操作数必须为整数,返回的是整除之后的余数

移位操作符

右移操作符

c语言-操作符详解_第3张图片

c语言-操作符详解_第4张图片

左移操作符
  • 规则:左边丢弃,右边补0
    c语言-操作符详解_第5张图片
    警告:对于位运算符,不要移动负数位,这个是标准未定义的,只能作用于整数,不能作用与浮点数或者double类型
  • eg: int num=10;
  • num>>-1;
  • 这个是错误的

位操作符

按位与操作符 &
  • 计算规则:只要有一个为0,就为0,两个为1,结果才为1
  • 并且都是用补码进行计算,如果是负数,要先找出它的补码进行计算
  • c语言-操作符详解_第6张图片
按位或 |
  • 计算规则:只要有一个为1就为1,两个为0,结果才为0
  • c语言-操作符详解_第7张图片
按位异或 ^
  • 计算规则:相同为0,相异为1
  • c语言-操作符详解_第8张图片
不使用第三变量,交换两个数
  • 加减法 缺点:可能会溢出
  • 在这里插入图片描述
  • 乘除法 缺点:可能会溢出
  • 在这里插入图片描述
  • 异或法 不会溢出
  • 在这里插入图片描述
统计二进制中的1的个数
  • 以下只能用于正整数
    c语言-操作符详解_第9张图片
  • 解释:将二进制的32个比特位全部打印,然后再不断右移c语言-操作符详解_第10张图片

赋值操作符

  • 赋值操作符是一个等号,而判断是两个等号
复合操作符
  • += -= >>= &= ^= *= %=

单目操作符

! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数类型长度
~ 对一个数的二进制取反
前置,后置–
++ 前置,后置++
* 间接访问操作符
(类型) 强制转换
取地址 &

c语言-操作符详解_第11张图片

sizeof 计算的是变量所占内存空间的大小

c语言-操作符详解_第12张图片
c语言-操作符详解_第13张图片

按二进制位取反 ~

c语言-操作符详解_第14张图片

++ –

c语言-操作符详解_第15张图片

强制类型转换

c语言-操作符详解_第16张图片

sizeof 练习

c语言-操作符详解_第17张图片

逻辑操作符

c语言-操作符详解_第18张图片

c语言-操作符详解_第19张图片

三目操作符

c语言-操作符详解_第20张图片

  • 用三目操作符写
  • 在这里插入图片描述

逗号表达式

  • 逗号表达式,就是用逗号隔开的多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果
  • c语言-操作符详解_第21张图片

下标引用,函数调用,结构成员

  • 1.[]下标引用操作符
  • 操作数:一个数组名+一个索引值
  • c语言-操作符详解_第22张图片
  • 2.函数调用操作符
  • c语言-操作符详解_第23张图片
  • 3.访问一个结构的成员
  • c语言-操作符详解_第24张图片
  • 它本身就向内存申请了一部分空间,你也可以用指针来写
  • c语言-操作符详解_第25张图片
  • 也可以·这样写
  • c语言-操作符详解_第26张图片

表达式求值

  • 表达式求值的顺序一部分是由操作符的优先级和结合性决定的
  • 同样,有些表达式的操作数在求值时的过程可能需要转换为其他类型

隐式类型转换

  • c的整型算术运算符总是至少以缺省整型类型的精度来访问
  • 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升
如何进行整体提升??
  • 整型提升是按照数据类型的符号位来提升的

整形提升规则:有符号数,高位补符号位。 无符号数,高位补0

c语言-操作符详解_第27张图片

  • 例子1
  • c语言-操作符详解_第28张图片
  • 例子二c语言-操作符详解_第29张图片
算术转换
  • 如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系成为:寻常算术转化
  • long double
  • double
  • float
  • unsugned long int
  • long int
  • unsigned int
  • int
  • 如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另一个操作数的类型后执行运算 并且是低的转换为高的
  • 注意:算数转换要合理,要不然会出问题

操作符的属性

  • 1.操作符的优先级
  • 2.操作符的结合性
  • 3.是否控制求值顺序
  • c语言-操作符详解_第30张图片
    *注意: 一定要保证只有唯一的一个运算顺序,不然代码就是错误的

ok see you!!!

你可能感兴趣的:(笔记,初学者,小白哦,c语言)