黑马程序员----C语言学习笔记之运算符2

------Java培训、Android培训、iOS培训、.Net培训--------

1.运算符

1)运算符是告诉编译程序执行特定算数或逻辑操作的符号


2)分类
 1>按功能分类
a)算数运算符,例如 +,-,*,/
b)关系运算符,例如 >,<.>=,<=,!=
c)逻辑运算符
c)按位运算符,&,|
 2>按操作数个数分为
  a)单目运算符,只有一个操作数,如i++,sizeof,!
  b)双目运算符,有两个操作数,如 a = b
  c)三目运算符,有三个操作数,a > b ? a :b 
 3>图:运算符表


3)优先级和结合性
A* 优先级
C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级高的比优先级低得先运算。优先级相同时,则按照结合性来判断谁先运算。
a)附图:优先级结合性 图表
B* 结合性
C语言中,各运算符的结合性分为两种,即左结合性(从左向右)和右结合性(从右向左)。例如算数运算符的结合性是自左至右,即先左后右。如有表达式x-y+z,则应限于“-”号结合,执行x-y运算,然后再执行 +z 运算。这种自左至右的结合,方向就成为“左结合性”。而自右至左的结合方向成为"右结合性”,最典型的右结合性运算是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x = (y=z)运算


4)运算符的使用
经典例子 1:倒序输出一个五位数
int a;
   printf("input a digit number(>9999):");
   scanf("%d",&a);
   
   for (int i = 0; i < 5; i++) {
       printf("%d",a%10);
       a = a /10;
   }


结果:input a digit number(>9999):12345
54321
经典例子 2:
int a = 5 +5 * 5 + 5;
printf("%d",a);//打印35


5)注意事项
a) 算数运算,即加减乘除运算时,如果任何一个值是实数,那么即使另一个是整数,得到的结果也是实数,例如
printf("%f\n", 1+0.5); // 打印1.500000


b) 如果 把一个实数的值赋给一个整数,那么整数的值会只保留整数部分。例如int a = 1.5;
printf("%d",a);//打印1


c)如果表达式过长,导致难以判断结合性,可以用括号来区分。这样易于理解和排错




3.求余运算符
1)求余规则
m%n m除以n后,取得余数部分
例如 10 % 3 = 1
2)注意事项
m = 0, 可以,结果为0
n = 0, 不可以,无意义
m > n, 正常求余即可
m < n, 结果为m
m与n都不能为小数
m < 0 结果为负数,如 -3 % 10 = -3
n < 0 结果无变化,即结果的正负性取决于m ,如3 % -10 = 3


3)写法规范
运算符两侧加空格(写法上面的例子)




4.类型转换
类型转换分
1) 隐式转换(也称为自动转换)
例:
float a = 23.4f; 
int b = 10;
printf("%d",a + b);//有警告结果是1606416392

正确做法:
int result = a + b;
printf("%d",a + b);//无警告,结果是33


原因:float + int 这是可以运行的,int会自动转换为float,即10-->10.0f
然后float又转换成int型。舍弃了小数位。
如:
float c = a + b;
printf("%f",a + b);//结果33.400002(有效位是7位,其他的无效)


2) 显式转换(强制类型转换)
printf("%d", (int)(a + b));//无警告,结果为:33


3) 转换规则
double ←── float 高

long

unsigned

int ←── char,short 低


4) 注意事项
1)用一个大数加上一个特别小的数,如果使用单精度的float,那么会有问题(造成数据丢失),因为float的有效位只有7位
int num = 3333;
float a = 0.000003;
printf("%f",num + a); //结果为3333.000000


2)强制类型转换是临时转换
float a = 23.4f;
printf("a d= %d", (int)a);//此处是临时转换,不会改变原值
printf("a f= %f", a);//打印结果:23.400000



5.表达式
1) 用运算符把常量,变量,函数等按照一定的规则,连接起来的式子,就称之为表达式
2) 分类
a) 算数表达式
b) 关系表达式
c) 逻辑表达式
重点:表达式一定有返回值


3)表达式语句: 表达式后面加上分号,构成表达式语句
int a = 10, b = 3;
int c = a + b;//表达式 a + b 的返回值是13,因为c 的值为13


6.赋值运算符
等号 = 
1)作用:把等号右侧的值给等号左侧的变量
例如
1 = 3;// 不对
a + b = 3;//也不对


注意: 等号的左侧必须是一个变量,而不能是常量或者表达式


2) 赋值运算符的结合性:右结合(自右至左)
int a,b,c;
a = b = c = 2;
printf("a=%d,b=%d,c=%d",a,b,c);//结果a=2,b=2,c=2



3) 复合赋值运算符
a = a + 3 可以简写成 a += 3. 减法,除法,乘法同理
a += b + 3 相当于 a = a + (b + 3)


7.自增减运算符
1)在程序设计中,经常遇到i = i + 1 和 i = i - 1这两种极为常用的操作,C语言为这种操作提供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符,他们是单目运算符,是从右至左结合的算数运算符


2) 前缀表达式:++x,--x,x为变量名,先完成变量的自增减1运算,再用x的值作为表达式的值,即“先变后用”
例:
int a = 1;
printf("a = %d",++a);//打印a = 2


3) 后缀表达式:x--,x++,与前缀表达式不同,遵循“先用后变”原则
例:
int a = 1;
printf("a = %d",++a);//打印a = 1


4)注意事项 
a.不管是++a还是a++最后a的值都加了1
b.自增减符号不能用在常量上
例如
++3;//错误
++(a+3);//错误,因为a+3表达式返回的值是常量


c.
 int a = 3, b = 5; 
  int result = a+++b++;//相当于 (a++)+(b++)
  printf("a = %d, b = %d,result = %d", a,b,result);//打印a=4,b=6,result = 8
  因为a++和b++是后缀表达式,遵循“先用后变”的原则,即在值变之前用,所以此处用的还是用来的值相加


d.表达式的值和变量的值是两码事


5) 自增减使用技巧
i++  先看到变量,所以先取出变量的值用,再做+1运算
++i  先看到++,所以先进行+1操作,再取变量的值使用


8.sizeof运算符
1)sizeof是C语言的一种单目运算符,以字节形式给出了其操作数的存储大小,操作数可以是一个表达式或者括号内的类型名,操作数的存储大小由操作数的类型决定


2)用法

sizeof(int),sizeof(2)


3)注意事项

a.sizeof不是一个函数,尽管它的用法像是一个函数


b.sizeof('a') 的结果是4

因为'a'是一个字符常量,使用ASIC码存储的,'a'对应的是97


c.char ch = 'a'
 sizeof(ch) 的结果是1

如果是char类型(范围-128~127)的变量,则占用1个字节


d.sizeof 用在跟常量一起时,可以省略括号
例如:
printf("%d",sizeof 10);//打印4


   e.sizeof 用在数据类型时不能省略括号


9.逗号表达式
1)概念
在C语言中,逗号“,"也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式
例如 a = (a+b,c+2);


2)求值过程
其求值过程是依次求所有表达式的值,并以表达式n的值作为整个逗号表达式的值
例如:表达式1,表达式2。。。。表达式n
最终结果是表达式n的值
例如:
int a = 4, b = 5, result = 0;8      8      9
result = (a + 4, b + 3, a + b);//result  = 9


3)注意事项
a.加括号和不加是有区别的
b.逗号运算符是可以嵌套使用的  
c.有时候,不太注重逗号表达式的值,而是其计算过程
d.并不是所有出现逗号的地方都能组成逗号表达式:比如定义变量int a,b,c;


10.关系运算符
1)概念
在C语言中所有值都是有真假性的,非零即真,只有0为假。比较两个数或者表达式之间关系的运算符称为关系运算符。
2)分类
> 大于
< 小于
!= 不等于
>= 大于等于
<= 小于等于


3)关系表达式:用关系元素安抚连接的式子


4)比较结果只有真(1)和假(0)


5)关系表达式的结合性
左结合
例如result = 1>2<1;// result = 1;


11.逻辑运算符
1)&&(与运算),||(或运算),!(非运算)
2)逻辑表达式
格式:表达式1 逻辑运算符 表达式2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值