黑马程序员——C语言基础---运算符
来源:互联网 发布:淘宝发送优惠券给买家 编辑:程序博客网 时间:2024/05/17 23:24
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
一、运算符的分类
按照功能划分:
算术运算符、关系运算符与逻辑运算符、按位运算符。
运算符根据参与运算的操作数的个数分为:
单目运算
只有一个操作数 如 : i++ ! sizeof
双目运算
有两个操作数 如 : a+b
三目预算
C语言中唯一的一个,也称为问号表达式 a>b ? 1 : 0
1、算术运算符包括:
名称
符号
说明
加法运算符
+
双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有左结合性。
减法运算符
-
双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合 性。
乘法运算符
*
双目运算符,具有左结合性。
除法运算符
/
双目运算符,具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如
果运算量中有一个是实型,则结果为双精度实型。
求余运算符 (模运算符)
%
双目运算符,具有左结合性。要求参与运算的量均为整型,不能应用于float或double 类型。 求余运算的结果等于两数相除后的余数,整除时结果为0。
特点:
什么样数据类型相互运算结果还是什么数据类型
2、算术运算符的结合性和优先级
结合性:从左到右
优先级:
(1) * / % 优先级 大于 + -
(2) 优先级相同则左结合计算 3*5/3+18 ----> 先算3*5
<span style="font-family:SimSun;"><span style="font-size:14px;">#include <stdio.h>int main(int argc, const char * argv[]) { //表示定义了三个整型的变量 int a = 10,b=3,result=0; //f1 是float类型,单精度 float f1 = 3.0f; result = a+b; //13 result = a-b; //7 result = a*b; //30 //a、b都是整型,除法的时候,两个操作数如果都是整型的,结果也是整型的 result = a/b; //3 printf("%f\n",a/f1); //3.333333 //result是一个int类型的数,如果给他赋值一个小数,那么此时只能保存小数的整数部分 result = a/f1; //3 //1-1.5按理说应该是-0.5 放到整型变量result中,只保留整数部分 //所以是0 ,0是部分正负 result = 1-1.5;//-0.5 -0 0 result = ((a*b)/3)-(5*6)+30; // a*b = 30 // 30/3 = 10 // 5*6=30 // (10-30)+30 // -20 // 10 printf("result = %d\n",result); return 0;}</span></span>三、求余运算符使用注意
1、求余的规则
int m = 10,n = 3;
m%n m除以n之后,取得余数部分
10%3 == 1
m = 0 可以的,0
n = 0 不可以的,无意义
m > n 正常求余数就可以 1
m < n 结果 m
2、求余的注意事项
1)m和 n都不能为小数
2)m < 0 结果为负数
3)n < 0 正负性取决于m
<span style="font-family:SimSun;">#include <stdio.h>int main(int argc, const char * argv[]) { //写法规范:运算符的两侧我们一般加上一个空格 int result = 10 % 3; //1 result = 23 % 2; //1 (奇数) result = 20 % 2; //0 (偶数) result = 3 % 10;// result = 3.5 % 10; //不对的,求余的双方不能为小数 result = -3 % 10; result = 3 % -10; printf("result = %d\n",result); return 0;}</span>四、 算术运算符中的类型转换问题
算术运算符中的类型转换可分为:
1)隐式转换(自动转换)
2)显示转换(强制类型转换)
<span style="font-family:SimSun;"><span style="font-size:14px;">#include <stdio.h>int main(int argc, const char * argv[]) { float f1 = 23.4f; int num = 10; //1、隐式类型转换 // f1 + num // float + int 这是可以运行的 // int --> 会自动的转换为 float类型,隐式转换 // float + float int sum = f1+num; //f2 33.4 验证了,我们刚说的,int 转换为float类型了 float f2 = f1 + num; printf("%d\n",sum); //33.4 33 printf("%f\n",f2); //33.400000 //2、显示类型转换 (强制类型转换) //强制类型转换的格式: (要转换的类型)要转换的变量或者表达式; printf("%d\n",(int)(f1+num)); // int + int int sum2 = (int)f1 + num; printf("sum2 = %d\n",(int)f1 + num); //23.4 ----> 23 只取了整数部分 printf("f1 = %d\n",(int)f1); //注意事项: //1、用一个大数加上一个特别小的数,如果使用float会有问题(造成数据丢失) // float的有效数位只有 7 位 int num3 = 3455; float f3 = 0.00003; printf("%f\n",num3+f3); //3455.00003 //2、强制类型转换是临时转换 printf("f1 d= %d\n",(int)f1); //23 此处是临时转换,不会改变原值 printf("f1 f= %f\n",f1); // 23.400000 return 0;}</span></span>五、表达式
1、表达式:用运算符把常量、变量、函数按照一定的规则,连接起来的式子,就称之为表达式
2、表达式分类:算术表达式 关系表达式 逻辑表达式
重点:表达式一定有返回值
3、表达式语句:表达式后面加上分号,构成表达式语句
int a = 10,b = 3;
int c = a+b; // a+b 返回值 13
c = 1+1;
c = a+4;
六、赋值运算符
1、赋值运算符
=
作用: 把等号右侧的值给等号左侧的变量
100 = 3; //不对的 a+b = 3; //不对
注意: 等号的左侧必须是一个变量
2、赋值语句
在赋值表达式后面添加一个分号,构成了一个语句,称为赋值语句。
例如:式子x=(a=5)+(b=8)是合法的。
它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x,故x应等于13。在C语言中也可以组成赋值语句,按照C语言规定,任何表达式在其未尾加上分号就构成为语句。 因此如x=8;a=b=c=5;都是赋值语句。
3、复合的赋值运算符
在赋值符“=”之前加上其它二目运算符可构成复合赋值符。
/=
除后赋值 变量/=表达式
如:a/=3;即a=a/3
*=
乘后赋值 变量*=表达式
如:a*=3;即a=a*3
%=
取余后赋值 变量%=表达式
如:a%=3;即a=a%3
+=
加后赋值 变量+=表达式
如:a+=3;即a=a+3
-=
减后赋值 变量-=表达式
如:a-=3;即a=a-3
构成复合赋值表达式的一般形式为:变量双目运算符=表达式
它等效于
变量=变量双目运算符 表达式
例如:
a+=5等价于 a=a+5 x*=y+7 等价于 x=x*(y+7) r%=p 等价于 r=r%p
注意:赋值运算符优先级排名14位,仅仅高于“,”运算符。
<span style="font-family:SimSun;"><span style="font-size:14px;">#include <stdio.h>int main(int argc, const char * argv[]) { int a = 3,b=4,result=0; // 1、赋值运算符的优先级 // = + - // 7 - 3 // = - // = 4 result = a+b-3; printf("result = %d\n",result); //2、赋值运算符的结合性 // 赋值运算符 结合型:右结合(自右向左) int a1,b1,c1; a1 = b1 = c1 = 10; // 3 2 1 //(a1 = (b1 = (c1 = 10))); printf("a1 = %d,b1 = %d,c1 = %d\n",a1,b1,c1); //疑惑? //int a2 = b2 =c2 =10; return 0;}</span></span>七、自增、自减运算符
1、运算符介绍
在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作提供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。它们是单目运算 符,是从右向左结合的算术运算符。
2、自增、自减运算符求值过程
1)前缀表达式:++x, --x; 其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表达式的值;即“先变后用”,也就是变量的值先变,再用变量的值参与运算。
2)后缀表达式:x++, x--; 先用x的当前值作为表达式的值,再进行自增自减1运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化。
3)自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整型、实型,还是字符型变量等,但不能用于表达式或常量。
如:++(a+b),与5++, const int N=0; N++; 等都是错误 的。
而i+++j++、++i+(++j)、++a+b++、++array[--j]等,这些都是合法的。
3、运算符优先级和结合性
优先级
优先级是第2级
右结合
编译器对程序编译时,从右到左可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;
注意:不管“++” 在前还是在后,最后变量的值都会+1
八、sizeof运算符sizeof运算符是一个单目运算符
作用是:计算常量、变量、数据类型 在内存中占用的字节数
1)用sizeof计算常量在内存中占用的字节数
sizeof(1) //计算常量 1 在内存中占用的字节数 4
// 1 默认的事一个10进制的整数(int) 4
sizeof(2.3f); //计算 float类型的常量在内存中占用的字节数 4
sizeof(2.3); //计算 double 类型的常量在内存中占用的字节数 8
sizeof('a'); //计算 'a' 字符常量 在内存中占用的字节数 1 4?
2)用sizeof运算符计算变量在内存中占用的字节数
int a = 10;
float f1 = 2.3f;
double d1 = 2.3;
char ch = 'a';
sizeof(a); //计算int类型变量a在内存中占用的字节数 //4
sizeof(f1); //计算float类型的变量 f1 占用的字节数 //4
sizeof(d1); //计算double类型的变量 d1 占用的字节数//8
sizeof(ch); //计算char类型的变量 ch 占用的字节数 //1
3)sizeof用于计算某一种数据类型在内存中占用的字节数
sizeof(int); //表示int类型的数据在内存中占用的字节数 4
sizeof(float); //表示float类型的数据在内存中占用的字节数4
sizeof(double); //表示double类型的数据在内存中占用的字节数8
sizeof(char); //表示char类型的数据在内存中占用的字节数1
九、逗号运算符1、基本概念
在C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般形式为: 表达式1, 表达式2
2、求值过程
其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
如果逗号表达式如下:
表达式1, 表达式2, ...表达式n整个逗号表达式的值等于表达式n的值。
3、逗号运算符使用注意:
1)逗号表达式一般形式中的表达式1和表达式2也可以又是逗号表达式。
例如: 表达式1, ( 表达式2, 表达式3 )形成了嵌套情形。
2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
3)并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。
<span style="font-family:SimSun;"><span style="font-size:14px;">#include <stdio.h>int main(int argc, const char * argv[]) { int a = 4,b = 5,result=0; //a+4,b+3,a+b 用逗号连接的表达式是一个逗号表达式 //逗号表达式的求值过程:先逐个求表达式的值就,然后把最后一个表达式的值返回(作为整个逗号表达式的值) // 8 , 8 , 9 result = (a+4,b+3,a+b,1+2,10); printf("result = %d\n",result); return 0;}</span></span>
十、关系运算符
1、C语言中的真假性
在C语言中所有数值都是有真假性,非零即真,只有0为假,关系运算符返回值只有两个要么是真(1)要么是假(0) 关系运算符(比较运算符)
2、关系运算符
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。
比较两个量的运算符称为关系运算符。
序号
运算符
结合性
1
>
大于 如:a>b a>3 5>4 1>2
左结合
2
<
小于 如:a<c d<3 2<5
左结合
3
>=
大于等于 如: a>=1 d>=c
左结合
4
<=
小于等于 如: a<=0 i<=19
左结合
5
==
等于 i==3 a==b
左结合
6
!=
不等于 a!=b c!=5
左结合
3、关系运算符的优先级
关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=
==和!=的优先级相同。
<span style="font-family:SimSun;"><span style="font-size:14px;">#include <stdio.h>int main(int argc, const char * argv[]) { int a = 3,b = 2,result = -1; //把a>b的值赋值给result // 3 2 result = a > b; //1 result = a < b; //0 // 判断 a 是不是大于或者等于 3 result = a >= 3; //1 result = a <= 3; //1 result = a == 3; //1 result = a == b; //0 result = a != b; //1 printf("result = %d\n",result); return 0;}</span></span>
- 黑马程序员——C语言基础---运算符
- 黑马程序员--C语言基础-运算符
- 黑马程序员-----------C语言基础-----------运算符
- 黑马程序员——C语言——基础运算
- 黑马程序员——C语言基础(三)基本运算
- 黑马程序员——C语言基础---基本运算
- 黑马程序员—IOS基础(C语言基本运算)
- 黑马程序员——C语言基础 03—基本运算符
- 黑马程序员——ios基础---C语言:数据类型、运算符、选择结构
- 黑马程序员——ios开发基础之C语言数据类型、运算符与输入输出
- 黑马程序员_1 c语言基础 运算
- 黑马程序员---c语言基础--基本运算
- 黑马程序员—Java语言基础(运算符、代码示例)
- 黑马程序员--C语言基础-运算符2
- 黑马程序员---C语言基础---概述、运算符
- 黑马程序员-c语言基础总结之运算符
- 黑马程序员——C语言基础篇---基本运算和位运算
- 黑马程序员——C语言——运算符
- Building real time app with Socket.io and Node.js
- 第一层第一题:你要的飞碟在这里
- WEB网站常见的攻击方法总结与原理分析
- 困扰我的【编程】-如果它能让你快乐-继续做!
- ios-下载管理类封装
- 黑马程序员——C语言基础---运算符
- 9.27
- 2015年终总结(上)
- 动态规划之《寻找最大上升序列》
- 通俗的理解Gradle
- 我也来写写如何在百度收录列表显示缩略图
- linux常用命令总结(持续更新)
- iOS多线程操作(NSThread,GCD,NSNSOperation )
- 最长递增子序列,最长递增字串