黑马程序员—IOS基础(C语言基本运算)

时间:2021-01-30 00:27:26

本文将根据李明杰老师上课的视屏—C语言基本运算,总结以下几种常用的运算。其中包括:算术运算、赋值运算、自增自减运算、sizeof运算、关系运算、逻辑运算、三目运算。

一:算数运算
1.加法运算 +
C语言中的加法与数学中的用法相同;除开能做加法运算,还能表示正号: +2、+20
2.减法运算 -
加法运算与减法运算在C语言中的用法与数学上的用法都是类似的;除开能做减法运算,还能表示负号: -5、-50
3.乘法运算 *
与常用的数学运算不同;数学运算:3 x 2,而c语言中:3 * 2
4.除法运算 /
C语言中的除法运算跟数学除法运算相差甚大:
1> 符号:数学运算 ÷ c语言 /
2> 运算结果:整数除以整数,还是整数。 1/2的值是0
注意:
1> C语言的基本数据类型决定了输出值的类型。两个整型数相除必定输出结果为整型
2> 如果为浮点型数据(double\float),结果与数学运算相似,但是两个相除数据也必须为小数

int a = 3;
int b = 8;
// 输出a/b, b/a的值
printf("a/b=%d,b/a=%d\n",a/b, b/a);

此时输出结果为a/d=0; b/a=2
5.取余运算 %
1> 什么是取余:计算两个整数相处之后的余数
2> %两侧只能是整型类型数 (int,long int, short int等,而double、float不能够使用)
3> 正负取决于%左侧的数值

int a = 6%3;
int b = 6%(-5);
int c = -6%5;
int d = -6%(-5);
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d)

输出结果:a=0, b=1, c=-1, d=-1,在计算过程中一定要注意符号的位置。
注意:
1> 自动类型转换

int a = 5.2 // a的值为5
int b = 5.2 + 6.9 // b的值为12
/*自动将大类型转换成小类型,会丢失精度*/

2> 自动类型提升

// 将右边的5 提升为double类型
int c = 5.2 + 5;

3> 强制类型转换

double a = (double)1 / 2; // a的值为0.500000
double b = (double)(1 / 2); //b的值为0.500000
int c = int(1 / 2); // c的值为0

二:赋值运算 =
(在数学运算中=表示左右两边的数值相等,而在c语言中=表示赋值,且=左边不能为常量,比如8 = 10)
1.简单赋值

int a = 10;
int a = b = 10;

2.复合赋值
复加减乘除余

int a = 4;
a +=2; // 等价于a=a+2; a的值为6
a -=3; // 等价于a=a-3; a的值为3
a *=4; // 等价于a=a*4; a的值为12
a /=5; // 等价于a=a/5; a的值为2
a %=2; // 等价于a=a%2; a的值为0

三.自增自减
自增自减运算符 ++ –
1.简单使用
1> ++ 自增运算符。如a++, ++a, 都等价于 a = a+1
2> –自减运算符。如a–, –a, 都等价于a = a-1
3> 常量不能进行自增自减运算,比如:5++
2.++a 和 a++的区别

int a = 10;
int b = a++; // a自增为11
a = 10; // 重新给a赋值
int c = ++a;
printf("b=%d,c=%d\n",b,c);
/*此时的输出结果b=10,c=11*/

四. sizeof
1.作用
用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
2.基本形式
*sizeof(变量\常量)
*sizeof 变量\常量
*sizeof(数据类型)
*不能是 sizeof 数据类型
五.关系运算(比较运算)
1.条件判断
默认情况下,我们在程序中写的每一句正确代码都会执行。但很多时候,我们想在某个条件成立的情况下才执行一段代码(若采用条件语句也可以完成)
2.真假
在C语言中,条件成立为‘真’,条件不成立为‘假’,因此,判断条件是否成立,就是判断条件的‘真假’。怎么判断真假呢?C语言规定,任何数值都有真假性,任何非0值都为‘真’,只有0才为假。
3.关系比较
关系运算符的运算结果只有2种:如果条件成立,结果就为1,也就是‘真’;如果条件不成立,结果就为0,也就是‘假’。
4.使用注意
1> 关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1
2> 关系运算符的结合方向为“从左往右”: 4>3>2
3> 关系运算符的优先级小于算术运算符:3+4>8-2
六.逻辑运算
*逻辑运算包括3种:&& 逻辑与 || 逻辑或 ! 逻辑非
*使用依据:在多个条件同时成立的时候才能执行某段代码。比如:用户只有同时输入了QQ和密码,才能执行登录代码,如果只输入了QQ或者只输入了密码,就不能执行登录代码。
*逻辑运算的结果只有2个:‘真’为1,‘假’为0
1.&& 逻辑与
1> 使用格式
”条件A && 条件B“
2> 运算结果
只有当条件A和条件B都成立时,结果才为1,也就是‘真’;其余情况的结果都为0,也就是‘假’。因此,条件A或条件B只要有一个不成立,结果都为0,也就是‘假’。
3> 运算过程
* 如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即‘真’,如果条件B不成立,结果就为0,即‘假’。
* 如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是‘假’。
4> 举例
逻辑与的结合方向是“自左至右”。比如表达式 (a>3) && (a<5)
* 若a的值是4:先判断a>3,成立;再判断a<5,也成立。因此结果为1
* 若a的值是2:先判断a>3,不成立,停止判断。因此结果为0
* 因此,如果a的值在(3, 5)这个范围内,结果就为1;否则,结果就为0
5> 注意
* 关系运算符的结合方向为”从左往右“。
* C语言规定:任何非0值都为‘真’,只有0才为‘假’。因此逻辑与也适用于数值。比如 5 && 4的结果是1,为‘真’;-6 && 0的结果是0,为‘假’。
2.||逻辑或
1> 使用格式
”条件A || 条件B“
2> 运算结果
当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是‘真’;只有当条件A和条件B都不成立时,结果才为0,也就是‘假’。
3> 运算过程
总是先判断条件A是否成立
* 如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是‘真’。
* 如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即‘真’,如果条件B不成立,结果就为0,即‘假’。
4> 举例
逻辑或的结合方向是“自左至右”。比如表达式 (a<3) || (a>5)
* 若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0
* 若a的值是2:先判断a<3,成立,停止判断。因此结果为1
* 因此,如果a的值在(-∞, 3)或者(5, +∞)范围内,结果就为1;否则,结果就为0
5> 注意
C语言规定:任何非0值都为‘真’,只有0才为‘假’。因此逻辑或也适用于数值。比如 5 || 4的结果是1,为‘真’;-6 || 0的结果是1,为‘真’;0 || 0的结果是0,为‘假’。
3.! 逻辑非
1> 使用格式
“! 条件A”
2> 运算结果
其实就是对条件A取反:若条件A成立,结果就为0,即‘假’;若条件A不成立,结果就为1,即‘真’。也就是说:真的变假,假的变真。
3> 举例
逻辑非的结合方向是”自右至左“,比如!(a>4)
* 若a的值是6:先判断a>4,成立,再取反之后的结果为0
* 若a的值是2:先判断a>4,不成立,再取反之后的结果为1
4> 注意
* 可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是‘真’,!!!(4>2)结果为0,是‘假’
* C语言规定:任何非0值都为‘真’,只有0才为‘假’。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1
4> 优先级
* 逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||
* 表达式!(3>5) || (2<4) && (6<1) :先计算 !(3>5)、(2<4)、(6<1),结果为1,式子变为1 || 1 && 0,再计算1 && 0,式子变为1 || 0,最后的结果为1
*表达式3+2<5||6>3 等价于 ((3+2) < 5) || (6>3),结果为1
* 表达式4>3 && !-5>2 等价于 (4>3) && ((!(-5)) > 2) ,结果为0
七.三目运算(三元运算符)
1> 使用格式
条件 ? 数值1 : 数值2
2> 运算过程
若条件成立,输出数值1;若条件不成立,输出数值2
3> 举例

/*计2个整数之间的最大值*/
int a = 10;
int b = 86;
int c = a>b ? a : b;
printf("c=%d\n",c);