运算符 表达式

1.运算符优先级

在这里插入图片描述
1.优先级最高者并不是真正意义上的运算符,包括:数组下标、函数调用、操作符各结构成员选择操作符 自左向右 a.b.c – (a.b).c
2.单目运算符,自右向左 (*p)() 不可省略括号 p++会被编译器解释成(p++),即取指针p所指向的对象,然后p+1;而不是(*p)++,取指针p所指向的内容,然后将内容+1
3.双目运算符
4.移位运算符
5.关系运算符
6.按位运算符
7.逻辑运算符
8.三目运算符
9.赋值运算符
10.逗号运算符 (宏定义比较多) 先计算左边的表达式,再计算右边的表达式,将右边表达式的值作为值传递。

ps:sizeof() 是在编译时期进行运算的。 ++等其他运算符是在运行时运算的

sizeof、::、.和(成员操作符)、? : 、注释符都不允许重载**

2.单目运算符里,除了++、–改变变量本身,其他的单目运算符不改变本身,只是改变其拷贝的值(存放在寄存器里,不回写),然后赋值给结果。

char ch=10; //0000 1010
~ch;// ch -- 00001010
char a=ch ;// a =11110101
++ch;// CH-- 00001011
++10;//错误
~10;//正确,不会作用于操作数,是对其的拷贝操作,不进行回写

在这里插入图片描述

3 编译器对于"求一个表达式的值,但不使用该值"的语句只是将该值简单的丢掉,(可以用到判断语句里,做值)

4. 当进行运算时,当运算符两边的类型不一致时会被自动类型转换。

运行时,运算符两边的类型是一致的(无论是默认转还是强转)。
在这里插入图片描述
编译器在处理需要默认类型转换时,将<-的类型自动转为它对应左边的类型进行计算(),如
float 转为double 进行运算,而上箭头不会自动转,而是当运算符左右两边类型还不相同时才会进行转换
横向转换(无条件转换),如两个float运算时自动转为double,提高运算的精度
纵向转换,运算(比大小)时小的转为大的(往上),赋值是截断
其他转换没有优先级,有多种转换方式

ps:指针类型都可以被强转。 结构体变量实体不能强转转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值