嵌入式小白第三天——数据类型 运算符 表达式

目录

运算符 表达式

运算符

1.运算符的优先级和结合性

2.运算的对象的个数

3.表达式

4.算术运算(+ - * / %)

/ 号

%号

5.自增运算符与自减运算符(++ --)

a++与++a区别

左值与右值

问题

6.赋值运算

7.逗号运算(顺序求值运算)

8.强制类型转换

9.隐式类型转换

10.不同类型间的混合赋值

补充:

数据类型之转义字符

基本的编程思路

错误分析


运算符 表达式

运算符

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.如果是在运行时出现错误,则它是逻辑问题,此时应该检查思路或者逻辑是否有问题;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值