打卡:4.16和4.17 C语言篇 -(1)初识C语言 - (8) *** 作符

打卡:4.16和4.17 C语言篇 -(1)初识C语言 - (8) *** 作符,第1张

C语言篇 -(1)初识C语言 - (8) *** 作符
      • 前言
      • 🎸算术 *** 作符🎸
      • 🎸赋值 *** 作符🎸
      • 🎸单目 *** 作符🎸
      • 🎸关系 *** 作符🎸
      • 🎸逻辑 *** 作符🎸
      • 🎸条件 *** 作符🎸
      • 🎸逗号表达式🎸
      • 🎸下标引用、函数调用和结构成员🎸

前言

🎸C语言是非常灵活的
🎸C语言提供了非常丰富的 *** 作符,使得使用起来就比较灵活,我们这篇来简单了解一下 *** 作符
下面的有些 *** 作符会不介绍,以后再说




🎸算术 *** 作符🎸
⭐+    ⭐-    ⭐*    ⭐/    ⭐%
加      减      乘     除      取模

下面会重点讲一下⭐/和⭐%
🎸移位 *** 作符🎸(涉及二进制的运算,学到这里再讲)
⭐>>          ⭐<<
右移操作符     左移操作符
🎸位 *** 作符🎸(涉及二进制的运算,学到这里再讲)
⭐&      ⭐^         ⭐|
按位与    按位异或     按位或
🎸赋值 *** 作符🎸
⭐=    ⭐+=    ⭐-=    ⭐*=    ⭐/= 

⭐&=   ⭐^=    ⭐|=    ⭐>>=   ⭐<<=

(后五个涉及二进制的运算,学到这儿再讲)
🎸单目 *** 作符🎸
⭐!        ⭐-       ⭐+       ⭐&  
逻辑反 *** 作  负值       正值       取地址

⭐sizeof     
 *** 作数的类型长度(以字节为单位)

⭐~  
对一个数的二进制按位取反

⭐--            ⭐++      
前置、后置--     前置、后置++

⭐*   
间接访问 *** 作符(解引用 *** 作符)

⭐(类型)       
强制类型转换
🎸关系 *** 作符🎸
⭐>
⭐>=
⭐<
⭐<=
⭐!=       用于测试“不相等”
⭐==       用于测试“相等”
🎸逻辑 *** 作符🎸
⭐&&          逻辑与

⭐||          逻辑或
🎸条件 *** 作符🎸
⭐exp1 ? exp2 : exp3
🎸逗号表达式🎸
⭐exp1, exp2, exp3, …expN
🎸下标引用、函数调用和结构成员🎸
⭐[]     ⭐()     ⭐.     ⭐->



🎸算术 *** 作符🎸

⭐+ ⭐- ⭐*就不介绍了,比较简单,就是你们理解的那样
我们来说一下⭐/和⭐%

int main()
{
	int a = 7 / 2;//除
	int b = 7 % 2;//取模
	printf("%d\n", a);
	printf("%d\n", b);

	return 0;
}

运行的结果:🔥
3(应为变量a是整型,不会四舍五入,只会取小数点前面的整数)
1(取模就是取余数)

我们定义a是一个浮点型变量,/左右的 *** 作数必须要有一个是浮点型,或者都是浮点型,我们来看一下不是浮点型的情况

🎸浮点型变量,整型 *** 作数

int main()
{
	float a = 7 / 2;//除
	int b = 7 % 2;//取模
	printf("%f\n", a);
	printf("%d\n", b);

	return 0;
}

运行的结果:
3.000000( *** 作数没有一个是浮点型,就会导致3.500000变成3.000000)
1

🎸浮点型变量,浮点型 *** 作数

int main()
{
	float a = 7 / 3.0;//除
	int b = 7 % 2;//取模
	printf("%f\n", a);
	printf("%d\n", b);

	return 0;
}

运行的结果:🔥
2.333333
1

如果要保留浮点型前几位,那就在%f中间加上.保留位数
例如%.2f,保留两位

int main()
{
float a = 7 / 3.0;//除
int b = 7 % 2;//取模
printf("%.2f\n", a);
printf("%d\n", b);

return 0;
}

运行的结果:🔥
2.33
1

取模的 *** 作数一个都不可以是浮点数,否则就会报错

int main()
{
	float a = 7 / 2.0;//除
	float b = 7 % 2.0;//取模
	printf("%.2f\n", a);
	printf("%f\n", b);

	return 0;
}

运行的结果:🔥




🎸赋值 *** 作符🎸

⭐=

int main()
{
	int a = 0;//像这个创建一个变量的时候给它一个值叫做初始化
    a = 20;//赋值=
    
	return 0;
}

⭐+=
⭐-=

int main()
{
	int a = 0;
	int b = 5;
	//像这个创建一个变量的时候给它一个值叫做初始化
	
    a=a+3;
    a+=3;//就相当于a=a+3;
  
    a=a-3;
    a-=3;//就相当于a=a-3;
	return 0;
}



🎸单目 *** 作符🎸
 a  +  b;
    +   // *** 作符有两个 *** 作数的就是双目 *** 作符
 + a;
 +      // *** 作符只有一个 *** 作数的就是单目 *** 作符

在c语言中,我们用0表示假,非0表示真
!就是把假变成真,把真变成假,就像下面这样

int main()
{
	int flag = 0;//flag假
	if (!flag)//!flag真
		printf("真");
	else
		printf("假");
	return 0;
}

运行的结果:🔥


⭐-
负号
把符号颠倒,把正的变成负的,把负的变成正的

int main()
{
	int a = -10; //只有一个 *** 作数的就是单目 *** 作符
	int b = -a; //只有一个 *** 作数的就是单目 *** 作符
	printf("%d", b);
	return 0;
}

运行的结果:🔥
10


⭐+
加号
+a与a是等同的,不会令负数变成一个正数


⭐sizeof
sizeof是 *** 作符,是单目 *** 作符,可以计算变量和类型所占内存的大小,单位是字节

int main()
{
	int a = 10;
	printf("%zu\n", sizeof(a));
	printf("%zu\n", sizeof(int));

	return 0;

}

运行的结果:🔥
4
4

如果用来计算数组的大小,我们来看一下:

int main()
{
	int arr[] = { 1,2,3,4,5 };
	printf("%zu\n", sizeof(arr));
	
	return 0;
}

运行的结果:🔥
很明显是4×5=20(在c语言中,是没有这些×÷符号的,要用c语言可以识别出来的符号*/)

也可以用这个sizeof(arr)/sizeof(arr[0])来计算数组中有几个元素

int main()
{
	int a = 10;
	int arr[] = { 1,2,3,4,5 };
	printf("%zu\n", sizeof(arr) / sizeof(arr[0]));
	return 0;

}

运行的结果:🔥
20(数组占20个字节大小)
5 (数组里面有五个元素)

sizeof不是函数,所以也可以把sizeof(a)变成sizeof a括号是可以省去的,这一点可以证明sizeof不是函数
但对于类型来说,括号是不可以省略掉的


⭐- -和⭐++
分前置和后置

i++;//后置++,先使用,后++
++i;//后置++,先++,后使用
i--;//后置++,先使用,后++
--i;//后置++,先--,后使用

看一下下面的代码,小奔只举一个++的例子,或者自己动手 *** 作一下

int main()
{
	int a = 0;
	int b = a++;
	printf("一%d %d\n", a, b);
	//b先使用了a=0这个值,然后a再++变成1
	int c = ++a;
	printf("二%d %d\n", a, c);
	//a先++变成2,c再使用a=2这个值

	return 0;
}

运行的结果:🔥
一1 0
二2 2


⭐(类型)

int main()
{
	//int a = 3.14;
	int a = (int)3.14;
	//3.14  字面浮点数,编译器默认理解为double,我们用(int)来把它强制认为是int类型
	printf("%d", a);
	return 0;
}

运行的结果:🔥
3




🎸关系 *** 作符🎸

关系 *** 作符是用来判断关系的,举一个例子

a < 10;
a <= 10;
a == 10;

判断a10的关系,成立就是真,不成立就是假
在这里我们来说一下===两个的区别,非常容易错

int main()
{
	int a = 10;

	if (a = 3)
		printf("%d", a);

	return 0;
}

你认为它输出的结果是什么?
运行一下🔥
结果是3

哎,你看到,你明明输入的a10,为啥打印的是3呢?
在这里小奔告诉你,=是赋值 *** 作符,是给变量一个值的作用,而==是关系 *** 作符,它才是判断是否相等的 *** 作符

应该这样

int main()
{
	int a = 10;

	//if (a = 3)
	if (a == 3)
		printf("%d", a);

	return 0;
}

运行的结果:🔥

可以看出来,a不等于3,所以为假,不执行if下面的 *** 作,也就是不打印a的值




🎸逻辑 *** 作符🎸

再来讲一下&&||的关系
哎,你有两只手,有一个桌子&&,和一个椅子||,桌子&&要两只手才能搬动,椅子||一只手就可以搬动
同理,
&&真,就是真
&&假,就是假
&&假,就是假

||真,就是真
||假,就是真
||假,就是假

写个代码试一下:

int main()
{
	int a = 10;
	int b = 20;
	
	if (a <= 20 && b >= 10)
		printf("真");
	else
		printf("假");

	return 0;
}

运行的结果:🔥


其他的自己试一试,在这里就不写了




🎸条件 *** 作符🎸

⭐exp1 ? exp2 : exp3
它有三个 *** 作数,所以是三目 *** 作符
它的意思是判断exp1是否为真,是真的话输出exp2的值,是假的话输出exp3的值
举例来使用一下

int main()
{
	int a = 10;
	int b = 20;
	//求最大值
	int r = a > b ? a : b;
//a>b是假,输出b的值,所以r=b=20
	printf("%d", r);
	return 0;
}

运行的结果:🔥
20

int r = a > b ? a : b;

上面的代码就类似于下面的代码

	if (a > b)
		r = a;
	else
		r = b;



🎸逗号表达式🎸

⭐exp1,exp2,exp3…expN
特点:从左到右依次计算,整个表达式的结果是最后一个表达式的结果
用法直接用代码来演示一下

int main()
{
	int a = 10;
	int c = 0;
	int b = (a = a + 2, c = a - 3, c - 3);
//b最后等于的是最后面的表达式
//a = a + 2 = 12
//c = a - 3 = 9
//c - 3 = 6
//b = 6
	printf("%d", b);
	return 0;
}

运行的结果:🔥




🎸下标引用、函数调用和结构成员🎸

⭐[ ]
在代码里面解释

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//定义数组大小的时候是不可以在[]里用变量的

	arr[5];//[]就是下标引用 *** 作符
	//arr和5都是 *** 作数

	int n = 5;
	arr[n];//这里是可以用变量的
	//这里的n是来访问下标是n的元素,在定义数组大小的时候是不可以用变量的

	return 0;
}

⭐()
函数调用 *** 作符

int Add(int x)
{
	return x + 5;
}

int main()
{
	int a = 10;

	a = Add(a);
//()函数调用 *** 作符,Add,a都是()的 *** 作数
//sizeof的()是可以省掉的,所以它不是函数
//函数是不可以省去()

	printf("%d", a);
	return 0;
}

今天结束了,写了两天,太多了,下一篇介绍关键字

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存