当前位置:网站首页>C语言 -- 操作符详解
C语言 -- 操作符详解
2022-08-04 05:18:00 【稚子】
本节重点:
- 各种操作符的介绍
- 表达式求值
操作符分类:
- 算术操作符 + - * / %
/ 两边若都为整数,则得到的也为整数;两边有一个为小数,得到的即为小数。
% 操作符的两个操作数必须为整数,返回的是整除之后的余数。
- 移位操作符
#include <stdio.h>
#include <string.h>
// >> 右移操作符
// << 左移操作符
// 移动的为二进制位
int main()
{
int a = 16;
// 16的二进制0001 0000
int b = a >> 1;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
/*
右移操作符:
1.算术右移
右边丢弃,左边补原符号位;
2.逻辑右移
右边丢弃,左边补0
*/
整数的二进制表示有 :原码、反码、补码,存储到内存的是补码
- 位操作符
& 按位与
| 按位或
^ 按位异或
注:他们的操作数必须是整数
练习:交换两个变量的值,不使用中间变量
#include <stdio.h>
#include <string.h>
int main()
{
int a = 3;
int b = 5;
// 加减法
a = a + b;
b = a - b;
a = a - b;
printf("after : a = %d b = %d\n", a, b);
return 0;
}
练习:求一个整数存储在内存中的二进制中1的个数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
// 统计num的补码中有几个1
int count = 0; // 计数
while (num)
{
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("二进制中1的个数 = %d\n", count);
return 0;
}
- 赋值操作符
变量在创建时给它一个值,叫做初始化,之后叫赋值
- 单目操作符
单目操作符,只有一个操作数,例如!
双目操作符,两个操作数
&a 取地址操作符,一般与指针结合使用
*p 解引用操作符
*p = &a
// 变量的赋值与使用
int a = 10;
int *p_a = &a;
*p_a = 20;
sizeof计算的变量是所占内存空间的大小,单位是字节
int 4个字节
char 1个字节
#include <stdio.h>
int main()
{
short s = 0;
int a = 10;
printf("%d\n",sizeof(s = a+5)); // s为short,2个字节
printf("%d\n",s); // sizeof 不参与运算,只计算空间的大小
return 0;
}
++a 前置++,先++,后使用
a++ 后置++,先使用,再++
强制类型转换
int a = (int)3.14 //正确用法
int a = int(3.14) //错误用法
- 关系操作符
- 逻辑操作符
&& 注:只要左边结果为假,右边不管结果是什么都不再计算
int i = 0,a=0,b=2,c=3,d=4;
i = a++ && ++b && d++
printf("a = %d\n b= %d\n c=%d\n d = %d\n",a,b,c,d);
// 输出结果 1 2 3 4
|| 只要左边为真,右边就不需要计算了
- 条件操作符
- 逗号操作符
逗号表达式就是用逗号隔开的多个表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
- 下标引用、函数调用和结构成员
下标引用操作符:一个数组名+一个索引值
函数调用操作符(),接受一个或多个操作数;第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
访问一个结构成员(重要)
结构体变量.成员名
#include <stdio.h>
// 学生
// 创建一个结构体类型
struct stu{
char name[20];
int age;
char id[20];
};
// 结构体对象s1,并初始化,实例化
struct stu s1 = {"张三",20,"20131532"};
int main()
{
printf("%s\n",s1.name);
printf("%d\n",s1.age);
printf("%s\n",s1.id);
return 0;
}
结构体指针->成员名
#include <stdio.h>
// 学生
// 创建一个结构体类型
struct stu{
char name[20];
int age;
char id[20];
};
// 结构体对象s1,并初始化,实例化
struct stu s1 = {"张三",20,"20131532"};
struct stu *ps = &s1; // 结构体指针
int main()
{
printf("%s\n",ps->name);
printf("%d\n",ps->age);
printf("%s\n",ps->id);
//以下效果相同
printf("%s\n",(*ps).name);
printf("%d\n",(*ps).age);
printf("%s\n",(*ps).id);
return 0;
}
表达式求值
表达式求值的顺序一部分是由操作符的优先级和结合性决定,同样有些表达式的操作数在求值的过程中可能需要转换为其他类型。
隐式类型转换
C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升
整型提升是按照变量的数据类型的符号位来提升的
边栏推荐
- C Expert Programming Chapter 5 Thinking about Linking 5.2 Advantages of Dynamic Linking
- How to dynamically add script dependent scripts
- 3000 words, is take you understand machine learning!
- See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
- The Road to Ad Monetization for Uni-app Mini Program Apps: Full Screen Video Ads
- 关于yolo7和gpu
- The difference between px, em, and rem
- Plus版SBOM:流水线物料清单PBOM
- Interesting Kotlin 0x0E: DeepRecursiveFunction
- 转:管理是对可能性的热爱,管理者要有闯进未知的勇气
猜你喜欢
ADC噪声全面分析 -03- 利用噪声分析进行实际设计
你以为border-radius只是圆角吗?【各种角度】
结构体函数练习
See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
docker安装mysql与宿主机相差8小时的问题。
震惊,99.9% 的同学没有真正理解字符串的不可变性
[Cloud Native--Kubernetes] Pod Resource Management and Probe Detection
el-Select 选择器 底部固定
少年成就黑客,需要这些技能
Shocked, 99.9% of the students didn't really understand the immutability of strings
随机推荐
擎朗智能全国研发创新中心落地光谷:去年曾获2亿美元融资
2022年PMP考试延迟了,该喜该忧?
力扣题解8/3
TSF微服务治理实战系列(一)——治理蓝图
心余力绌:企业面临的软件供应链安全困境
sql server如何得到本条记录与上一条记录的差异,即变动值
应届生软件测试薪资大概多少?
DataTable uses Linq for grouping and summarization, and converts the Linq result set into DataTable
flink cdc一启动,源端Oracle那台服务器的CPU就飙升到80%以上,会是啥原因呢?
Typora 使用保姆级教程 | 看这一篇就够了 | 历史版本已被禁用
【C语言进阶】程序环境和预处理
3000 words, is take you understand machine learning!
少年成就黑客,需要这些技能
Uni-app 小程序 App 的广告变现之路:全屏视频广告
动态规划总括
力扣:62.不同路径
C Expert Programming Chapter 5 Thinking about Chaining 5.6 Take it easy --- see who's talking: take the Turning quiz
商城App开发都有哪些功能呢
2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
信息学奥赛一本通 1312:【例3.4】昆虫繁殖