谢谢你陪伴了我两天,总算给你学完了!
一,自增自减
++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
可是%左右两边都得是整型。所以说,这个不能对