运算符与表达式,末章

谢谢你陪伴了我两天,总算给你学完了!

一,自增自减

++i,--i     在使用i之前,先使i的值加/减1,先增减`后运算

I++,i--     在使用i之后,使i的值加/减1        先运算,后增减

         ++I 是先执行i=i+1,在使用i的值1;i++是先使用i的值,在进行i=i+1

++和-是同优先级,自右向左

#include<stdio.h>
int main()
{
    int j,i=2;
    j=-i++;
    printf("j=%d,i=%d",j,i);
}

二:赋值

赋值运算符=

[变量]=【表达式】;

结合性,自右向左

优先级!>算术>关系>&&和||>赋值

注意:

1.格式左边一定是一个变量,格式右边可以是任意的表达式

表达式计算结果的数据类型应当和变量的数据类型相同

2.整型就是取整数部分

复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的

複合合复制运算的一半格式为:表达式1 op=表达式2   a+=b-1

他等价于  表达式1=表达式1 op           a=a+(b-1)

优先级:与=是同一优先级

结合性,自右至左

#include<stdio.h>
int main()
{
    int a=10,b=5;
    a+=b-1;
    printf("a%d",a);
}

 

 做了两个

#include<stdio.h>
main()
{
    int a=12;
    a+=a-=a*12;
    printf("a=%d",a);
}

 

三,逗号

逗号运算符:,

作用,将几个表达式隔开并以此计算

优先级;最低

结合性:自左向右

整个表达式的值:最后一个表达式的值

例子我做对了呢!!

#include<stdio.h>
int main()
{
    int a;
    a=(2+2,2*3,5);
    printf("a=%d",a);
}

第四行赋值于佳的右边使用括号,这是由于逗号优先级最低。如果没有括号a=2+2会视为一个表达式

#include<stdio.h>
int main()
{
    int a=3,b=4,c=5;
    printf("%d,%d",a,(a,c));
}

四,条件呢

只有一个三目运算符,条件运算符,就是?:

表达式1?表达式2:表达式3

用来判定表达式的结果

先求表达式1

如果表达式1的结果是真(非0),则执行2

如果表达式1的结果是假(0),则实行3

优先级:逻辑>条件>赋值

结合性:自右至左

#include<stdio.h>
int main()
{
    int max,a=5,b=3;
    max=a>b?a:b;
    printf("max=%d",max);
}

#include<stdio.h>
int main()
{
    int y,x=15;
    y=x>10?x/10:x>0?x:-x;
    printf("y=%d",y);

五,求字节数

运算符:sizeof(),他是个单目运算符,用于计算一个某总类型的运算量所占用的字节数

书写: sizeof(类型标识比如int float double等);

       Sizeof(变量名);或者sizeof  变量名(好多size,晕啦)

#include<stdio.h>
int main()
{
    int a;
    double x;
    printf("%d,%d\n",sizeof(a),sizeof x);
    printf("%d,%d",sizeof(int),sizeof(double));
}

 六,相生相成

2.20相生相成

自动类型转换:在运算时不必用户干预,系统自动进行的类型转换。

强制类型转换;当自动类型转换不能实现目的时,可以用强制类型转换。

自动类型转换    

               赋值转换

               运算转换

赋值转换要求:1.浮点型赋值给整型,结果将舍弃浮点数小数部分

2.整数赋值给浮点数,数值不会发生变化,结果已浮点数的方式存在

3.字符型赋值给整型,数值不会发生变化,但以整型的方式存储,内存空间变大

4.整型赋值给字符型,只把整型变量低2位赋值给字符型变量

5.双精度浮点数赋值给单精度浮点数,有效位会减少,丢失的不分四舍五入

例子的第五行

i赋值给ch   ,i原本是0100000001,所以把第八位给字符型也就是ch变成了00000001,也就是1

运算转换的要求:

c语言允许整型。实型。字符型数据进行混合运算。在进行运算时,不同类型的数据要先转换成同一类型,然后再进行运算,转换的过程是C语言编译器自动进行的

注意:1.转换按数据占用字节数增加的方向转换,例如int类型和short类型的变量进行计算时,会把short类型转换成int类型之后再进行计算

2.浮点数运算都是按照双精度进行的,float类型的变量会先转换成double类型再进行计算

特点:由数值存储位少的向多的转换

例子分析:

先算乘法,现将单精度x转换为双精度,然后x*y,i和ch自动转换为double

,最后相加。

强制类型转换

(类型说明符)[表达式]

类型说明符和表达式都必须加括号,如果表达式是单个变量则可不加

无论是强制还是自动,都不改变其原变量的数据类型。即对一个变量进行强制转换后得到的一个新类型的数据,原来的变量类型是不变的

例子

Int a=2,b=5;

Float x=4.4

b/a   因为b和a都是int整型,所以结果2.5变为整型2

(float)b/a  因为没有把b/a扩起来,所以只是强制把b的int整型变为float浮点型,也就是把5变为5.000000,然后a和b不一样类型,所以把aint变为float,所以a变为2.00000所以说结果就是2.5

(float)(b/a)对b/a结果强制转换,也就是把第一个2变为了2.0

(int)x%a+x         首先把x变为了int整型4,然后进行求余运算,4/2的余数是0,0+4.4=4.4

(int)x%(a+x)  错误,因为a+x是int和float加,就要变为单精度,也就是2.0+4.4=6.4

可是%左右两边都得是整型。所以说,这个不能对

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值