当前位置:网站首页>详细讲解C语言10(C语言系列)
详细讲解C语言10(C语言系列)
2022-06-26 12:37:00 【奶油酒窝*٩(ˊωˋ*)و*】
目录
前言:
在初识C语言中小编就与大家分享了操作符的一些小知识和大家一起认识了操作符,接下来小编带大家一起再次的学习和深入的了解操作符领略不一样的操作符。
操作符:
算数操作符:
算数操作符有:/、-、+、*、%
1.% :其中%两端的操作数必须为整型。
2. / :计算时若两端都为整型则计算结果只保留整数部分,若两端有一个为浮点型则计算的结果就为浮点型。(如一下代码所示)
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
float a = 6 / 5;
float b = 6.0 / 5;
float c = 6 / 5.0;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}代码截图:

移位操作符:
移位操作符:<< 、>>
<<:左移
特点:左边的丢弃,右边补0。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n", a);//保持不变 - 2
printf("%d\n", b);//将a的二进制位向左移动一位 - 4
return 0;
}代码截图:

解析示意图:
>>:右移
右移与左移有点区别,右移有两种右移法:
1.算数右移:右边丢弃,左边补原符号位。
2.逻辑右移:右边丢弃,左边补0。

位操作符:
位操作符有:&、|、^
注意:位操作符的操作数必须为整数
&:按位与(按二进制位进行与运算)
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a & b;
printf("%d\n", c);// 1
return 0;
}解析如下所示:
|:按位或(按二进制位进行或运算)
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a | b;
printf("%d\n", c);// 7
return 0;
}解析如下所示:

^:按位异或
规则:相同为0,不同为1。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a ^ b;
printf("%d\n", c);// 6
return 0;
}解析如下所示:

赋值操作符:
赋值操作符有:=、+=、*=、/=、>>=、<<=、%=
注意:=是进行赋值,==是进行判断。
单目操作符:
单目操作符有:!、-、+、&、sizeof、~、--、++、*、(类型)
!:逻辑反操作符
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int flage = 0;
if (flage)//flage为真时打印haha
printf("haha\n");
if (!flage)//flage为假时打印xixi
printf("xixi\n");
return 0;
}代码运行结果如下所示:
sizeof:计算操作数的类型长度(以字节为单位)
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
short a = 0;
int b = 0;
int arr1[10] = { 0 };
char arr2[10] = { 0 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);//计算为变量名时括号可省
printf("%d\n", sizeof(int));//计算为关键字的时候不可省略括号
printf("%d\n", sizeof(b));
printf("%d\n", sizeof(arr1));//可以计算数组的大小
printf("%d\n", sizeof(arr2));
return 0;
}代码截图如下所示:
~:对一个数的二进制位按位取反
&:取地址操作符
*:解引用操作符
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 4;
int* pa = &a;//*---说明pa是指针变量
*pa = 10;//*--对pa解引用
printf("%d\n", a);
return 0;
}代码截图如下所示:

(类型):强制类型转换
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = (int)3.14;
printf("%d\n", a);
return 0;
}
代码截图如下所示:

关系操作符:
关系操作符有:>、>=、<、<=、!=、==
逻辑操作符:
逻辑操作符有:&&、||
&&:逻辑与
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 0;
if (a && b)//有假则假
{
printf("haha\n");
}
else
{
printf("xixi\n");
}
return 0;
}代码截图如下所示:

||:逻辑或
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 0;
if (a || b)//有真则真
{
printf("haha\n");
}
else
{
printf("xixi\n");
}
return 0;
}代码截图如下所示:
注意:
1.&&:若有一个为0则往后的表达式就无须计算了。
2.||:若有一个为1则往后的表达式就无须计算了。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
//1.&&
i = a++ && ++b && d++;
printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
//2.||
//i = a++ || ++b || d++;
//printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
return 0;
}其中1.&& 的运行结果如下所示:
2.||的运行结果如下所示:
条件操作符:
条件操作符又称三目操作符,(exp1?exp2:exp3)
若exp1成立则计算结果为exp2的值否则为的exp3的值。
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//用条件运算符来计算最大值
int main()
{
int a = 4;
int b = 7;
int max = (a > b ? a : b);
printf("max = %d\n", max);
return 0;
}代码截图如下所示:

逗号表达式:
(exp1,exp2,exp3,……,expn)
逗号表达式的值为expn的值。
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 3;
int b = 4;
int c = 5;
int d = (a++, c = a + b, b = a + c);
printf("d = %d\n", d);//计算的结果为b的值
return 0;
}代码截图如下所示:
下标引用操作符:
[ ]:例子如下所示。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
printf("%d\n", arr[3]);//其中[]为下标引用操作符
return 0;
}代码运行截图如下所示:
函数调用操作符:
():例子如下所示。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 2;
int b = 3;
int ret = Add(a, b);//其中()为函数调用操作符
printf("ret = %d\n", ret);
return 0;
}
代码运行截图如下所示:
结构成员访问操作符:
结构成员访问操作符有:.、->
代码如下所示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Book
{
char name[10];
char id[10];
int price;
};
int main()
{
struct Book b = {"C语言","0x0060",30};
struct Book* pb = &b;
//通过.操作符来访问
printf("%s\n", b.name);
printf("%s\n", b.id);
printf("%d\n", b.price);
printf("%s\n", (*pb).name);
printf("%s\n", (*pb).id);
printf("%d\n", (*pb).price);
//通过->来访问
printf("%s\n", pb->name);
printf("%s\n", pb->id);
printf("%d\n", pb->price);
return 0;
}代码截图如下所示:

表达式求值:
1.隐式类型转换:
整型提升:整型提升是按照变量类型的符号位来提升的。
提升时我应该怎么补前面的位呢?规则如下所示。
有符号位:
负数:补1。
正数:补0。
无符号位:高位直接补0。
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char a = 3;
char b = 127;
char c = a + b;
printf("%d\n", c);
return 0;
}代码运行截图:
解析如下图所示:

2.算术转换:
向字节长的,精度高的转换。
3.操作符属性:
影响:
①:操作符的优先级。
②:操作符的结合性。
③:是否控制求值顺序。
总结:虽然我们有很多操作符的优先性,但是我们写出的表达式也不能通过操作符的属性确定唯一的计算路径,那么这个表达式就是问题表达式。
结束语:
这次小编与大家分享了C语言中我们常见到的操作符,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)
边栏推荐
- Lightflow completed the compatibility certification with "daocloud Enterprise Cloud native application cloud platform"
- NoSQL mongodb - 01 introduction to NoSQL and mongodb
- 7-1 n皇后问题
- [极客大挑战 2019]RCE ME 1
- Redis learning - 03 transaction
- [solved] data duplication or data loss after laravel paginate() paging
- 手把手带你学会Odoo OWL组件开发(7):OWL项目实战使用
- 【网络是怎么连接的】第二章(中):一个网络包的发出
- PHP get directory size
- 710. 黑名单中的随机数
猜你喜欢

Redis learning - 05 node JS client operation redis and pipeline pipeline

Less than 40 lines of code to create a blocprovider

TSMC Samsung will mass produce 3nm chips in 2022: will the iPhone be the first?
solo 博客系统的 rss 渲染失败

软件测试 - 基础篇

MySQL optimization - index (what is an index?)

不到40行代码手撸一个BlocProvider

JS get the current screen height method and listen for DOM elements to enter the viewport

Tiger DAO VC产品正式上线,Seektiger生态的有力补充

小白懒人专用-win10-win11一键安装版
随机推荐
Processing 多面体变化
详细实操分享,下班刷了两小时的搞笑视频,一个月收益7000多
Lightflow completed the compatibility certification with "daocloud Enterprise Cloud native application cloud platform"
一个快速切换一个底层实现的思路分享
面试题积累
Less than 40 lines of code to create a blocprovider
New routing file in laravel framework
Realize microservice load balancing (ribbon)
Microservice governance (nocas)
Generate JDE dot train
Tiger DAO VC产品正式上线,Seektiger生态的有力补充
Ubuntu安装配置PostgreSQL(18.04)
老司机总结的12条 SQL 优化方案(非常实用)
PHP calculates excel coordinate values, starting with subscript 0
Splunk iowait 报警的解决
【Spark】.scala文件在IDEA中几种图标的解释
深入解析 MySQL binlog
Msvcr110 not found DLL, unable to continue code execution Solution for startup
记一次phpcms9.6.3漏洞利用getshell到内网域控
国标GB28181协议EasyGBS视频平台TCP主动模式拉流异常情况修复