- 前言
- 🎸算术 *** 作符🎸
- 🎸赋值 *** 作符🎸
- 🎸单目 *** 作符🎸
- 🎸关系 *** 作符🎸
- 🎸逻辑 *** 作符🎸
- 🎸条件 *** 作符🎸
- 🎸逗号表达式🎸
- 🎸下标引用、函数调用和结构成员🎸
🎸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;
判断
a
与10
的关系,成立就是真,不成立就是假
在这里我们来说一下=
和==
两个的区别,非常容易错
int main()
{
int a = 10;
if (a = 3)
printf("%d", a);
return 0;
}
你认为它输出的结果是什么?
运行一下🔥
结果是3
哎,你看到,你明明输入的a
是10
,为啥打印的是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;
}
今天结束了,写了两天,太多了,下一篇介绍关键字
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)