目录
运算符 表达式
运算符
1.运算符的优先级和结合性
运算规则:不同优先级的运算混合时,高优先级的运算符先结合;同一优先级的运算混合运算时,按结合性方向进行结合。
2.运算的对象的个数
分为单目、双目,三目;
3.表达式
表达式是由运算符和运算数构成的字符序列,用于表示计算值;
所以表达式都是有值的,都是有数据类型的;
4.算术运算(+ - * / %)
注意事项:
/ 号
1.如果是两个整型的数相除,结果是等于整数,这个过程相当于整除的效果;
2.除数不能为0;
%号
1.除数不能为0;
2.在求余运算中,运算数只能是整数,不能是小数;
3.结果的符号是由左操作的符号决定(eg:10 % 3 = 1 ;10 % -3 =1 ;-10 % 3=-1;-10 % -3 =-1);
4.在printf中使用%时,需要打两个%%,不然会被识别为输出类型;
%的应用:
判断一个数x是奇数还是偶数:x%2 == 1时为奇数;x%2 ==2时为偶数;
对一个数N求余时,余数的范围是0~N-1;
5.自增运算符与自减运算符(++ --)
++ :它表示的是一个量一次增加1
a++与++a区别
i++是后置加加1,它是先用表达式的结果后i自增;++i是前置加加1,它是先i自增后再用表达式的结果。
注意:1.i++和++i如果两个是单独使用,则两个在效果上没有区别;
2.先用后加或先加后用在参与别的运算中才能发挥作用;
3.运算数i必须是一个可变的量;
4.浮点型也能够自增自减;
左值与右值
出现报错error:lvalue required as increment operand时
lvalue的意思是left value(左值)
通俗的定义:以赋值符号=为界,=左边的就是左值,=右边就是右值。eg:int b=3;a = b;a为左值,b为右值。
const int a = 10;const是constant(常变量:定义的是常量,但又有变量的属性),a其实还是一个变量,但是只能读不能修改。
更深层次可以将lvalue理解为localtion value,表示可定位的左值(像变量),而右值不可定位(像常量);
用表达式&a(取地址运算) 获取a对应的内存空间的首地址编号
问题
(1)问:i++与++i哪个的效率高?
答:++i的效率更高,因为它不需要额外的开空间,i++则需要另开一个空间用来存放表达式的结果。
(2)运算i+++++i
运用贪心法:从左到右逐个扫描,将字符尽可能多的结合成c语言运算符
所以表达式应该是(i++)++)+i,但是i++为右值所以编程是错误的
(3)调用函数printf(“%d,%d”,i,i++)
因为有的系统从左到右求值,有的系统从右向左求值,i++先用后加手势没有统一规定值什么时候加的,所以建议将代码写成int p = i;q=i++;printf(“%d,%d”,p,q);总之不要写出别人看不懂的,也不知道系统会怎么样执行程序。
6.赋值运算
赋值符号 = 就是赋值运算符,它的作用是给变量赋值
eg :int a ;
a =10;它是一个赋值运算,也是赋值表达式,同时它的结果也是a的值,类型也是a的类型
(+=)(-=)等赋值可以简化代码。
7.逗号运算(顺序求值运算)
语法结构:表达式1,表达式2,表达式3,.....,表达式N;
运算过程:从左到右依次运算,运算表达式的结果是整个语法中最后一个表达式的结果。
注:每个表达式都会计算完
8.强制类型转换
定义:就是通过自己动手转换
语法结构:(转换的类型)运算数
注:强制转换不会影响本身的运算数
9.隐式类型转换
从右到左必转
从下到上,低精度往高精度转
char,short类型运算时会转换成int类型
float类型运算时会转成double类型
低精度和高精度做混合运算时,低精度会往高进度转
eg:int a = 10 ,b = 3 ;printf("a/b=%f\n",a*1/b)为int型;
int a = 10 ,b = 3 ;printf("a/b=%f\n",a*1.0/b)为double型
10.不同类型间的混合赋值
高精度给到低精度
double/float 型给到int 型,值会精度丢失,只剩下整数部分;
长类型给到短类型
long给到int ;int给到short;float给到char,值会被高位拦截,只留低位;
短类型给到长类型
看有无符号:无符号时段类型给到长类型,值在高位补0;有符号时短类型给到长类型,值符号位扩展,符号位是0时,高位补0;符号位是1时,高位补1。
补充:
数据类型之转义字符
\n 换行字符 'a' 铃声字符;
\t 跳到下一个制表符(Tab—8个字符宽度);
\b 退一格,后面数据将前面一格的数据顶掉,当数据是‘\n’换行时直接换到下一行不顶掉前面数据;
\r 将当前位置的后面的数据移到最前面,并且覆盖掉前面的数据;;
\f 将当前位置后面的数据移到下一行的这个位置,并且当作开头;
\\ 代表一个反斜杠字符;
\' 代表一个单引号字符;
\" 代表一个双引号字符;
\ddd 1到3位八进制所代表的字符;
\xdd 1到2位十六进制所代表的字符;
基本的编程思路
1.理解问题:首先通过理解问题的需求,能够知道需要什么变量,什么常量,什么数据,需要得到什么对应的数据;
2.准备数据:按照问题需要的数据,准备输入变量数据;
3.处理数据:对输入的变量数据进行操作;
4.输出数据:输出处理好的变量数据,在输出不对的数据时再进行对代码的查找修改错误;
错误分析
1.如果是在编译时报出错误,它是语法错误,此时应该检查代码的语法是否有问题;
2.如果是在运行时出现错误,则它是逻辑问题,此时应该检查思路或者逻辑是否有问题;
标签:10,运算,++,数据类型,嵌入式,运算符,int,表达式 From: https://blog.csdn.net/weixin_68641081/article/details/140685283