前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C】操作符——知识点大全(简洁,全面)

【C】操作符——知识点大全(简洁,全面)

作者头像
YY的秘密代码小屋
发布2024-01-22 20:23:05
发布2024-01-22 20:23:05
13900
代码可运行
举报
文章被收录于专栏:C++系列C++系列
运行总次数:0
代码可运行

前言:大家好,这里是YY;此篇博客主要是操作符的知识点;包含【算术操作符】【负数的原反补码】【进制位的表示】【移位操作符】【位操作符】【赋值操作符】【逻辑操作符】【单目操作符】【其他操作符】【隐式类型转换】【问题表达式】【逗号表达式】

PS:创作不易,每个知识点都有例题或者图帮助理解;如果对你有帮助,希望能够得到您的关注,赞,收藏,谢谢!

一.算术操作符

+ - * / %


1.要点:

  1. 除了%操作符之外,其他操作符都可以作用于整数和浮点数
  2. 对于/操作符如果两个操作数都为整数,则执行整数除法;只要有浮点数,浮点数除法
  3. %操作符的两个操作数必须为整数。返回的是整除后的余数
  4. 除法 / 想要得到小数,保证除数和被除数中至少有一个是浮点数

(5.0/2——>2.5)


二.负数原码,反码,补码的互推


1.按位取反操作符:~(二进制位)

~:二进制位0变1,1变0

代码语言:javascript
代码运行次数:0
运行
复制
00000000000000000000000000000001
11111111111111111111111111111110 按位取反后

2.原反补互推演示

原理:

例子:


三.进制位的表示


1.不同进制位的特征:

进制位的表示范围都为(0~进制位-1) 例:10进制位(0~9) 8进制位(0~7)


2.二进制位表示

进制位从右往左,分别代表进制位的数×进制位的0到若干次方

例:二进制表示15


3.整型的二进制表示

四.移位操作符


1.左移操作符

  • 补码移动,空缺补0
  • 左移效果:扩大二倍 (负数也适用,例:4->8,-4->-8)

​​​​​

PS:涉及原反补码的运算,不清楚+1-1的可以看本博客原反补码块知识点

图示:


2.右移操作符

  • 逻辑右移:左边丢弃,左边补0
  • 算术右移(正负数):右边丢弃,左边补原符号位(保持原来的符号位)

图示:


五.位操作符


1.使用禁忌:

  • 不要移动负数位,此行为未定义!

2.位操作符一览:

1.按位与&:有0为0,全1为1 2.按位或 |:有1为1,全0为0 3.按位异或^:相同为0,相异为1


3.位操作符的注意要点:

  • 他们的操作数必须是整数!
  • 位操作的应用场景,一般是补码层面的运算

4.位操作符使用演示:


5.位操作符的应用:“不创建临时变量实现两个数的交换”

原理:

  • 任何数 和0 亦或^都是它自己,两个相同的数亦或^都为0
  • 运算后不会发生进位

代码语言:javascript
代码运行次数:0
运行
复制
int main()
{
  int a=10;
  int b=20;
  //二进制层面,每一位只有0/1两种可能
  a=a^b;   此时,a相当于在二进制层面上,原来ab两数二进制各位的集合
  b=a^b;   根据相同数亦或为0,b中存储的是集合排除掉b后的结果,即本来的a
  a=a^b;   根据相同数亦或为0,此时存储的是集合排除掉本来的a后的结果,即b
}

6.位操作符的应用:“求一个整数存储在内存的二进制中1的个数”


法一:利用移位操作符

原理:按位与&1,按位右移。统计32次后按位与1结果之和

代码演示:

代码语言:javascript
代码运行次数:0
运行
复制
int main()
{
  int count=0;
  for(int i=0;i<32;i++)
 {
    if((n>>1)&1)==1)
    {
      count++;
    }
 }
   return 0;
}

法二: 利用二进制原理

原理:

  • 模%2相当于拿到二进制位中的最右边一位
  • 除/2相当于拿到二进制位中的最右边边以外的二进制序列


六.赋值操作符


1.连续赋值(接收上一个运算的返回值)


2.复合赋值符


七.逻辑操作符


1.逻辑操作符一览

  • &&:逻辑与
  • ||:逻辑或

2.区分 “逻辑与或” 和 “按位与或”


3.经典例题


例1:逻辑与的“短路特性”——前面为0判定时,后面不操作


例2:逻辑或的“反短路特性”——前面为真判定时,后面不操作


八.单目操作符


1.单目操作符一览


2.sizeof特性与操作规范 (操作数的类型长度)

操作规范:

特性:sizeof内部操作不改变原值

PS:截断过程


九.其他操作符


1.下标引用操作符


2.函数引用操作符

():接受一个或多个操作数:第一个操作数是函数名,其余的操作数就是传递给函数的参数

演示:


3.访问结构的成员操作符

演示:


九.算术转换


十.隐式类型转换


1.概述:


2.整型提升:


一.正负数的整型提升

方法:高位补符号位


3.截断:

  • 与整型提升(char赋值给int)相对的,当int(整型)赋值给char时,会发生截断。
  • 运算时依照规定,又要进行整型提升
  • 涉及到运算时,才会发生截断

十一.问题表达式问题


原理:优先级虽然存在,但执行的次序存在不确定性


例1:无法判断三个fun( )哪个先执行


例2:无法判断是c开始先去+"--c",还是先执行--c再+c


十二.逗号表达式


1.逗号表达式

  • 逗号表达式,就是用逗号隔开的多个表达式
  • 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

2.逗号表达式的实际应用——简化代码

优化前:

代码语言:javascript
代码运行次数:0
运行
复制
a=get_val();
count_val(a);
while(a>0)
{
   业务处理
   a=get_val();
   count_val(a);
}

优化后:

代码语言:javascript
代码运行次数:0
运行
复制
a=get_val();
count_val(a);
while(a=get_val(),count_val(a),a>0)
{
   业务处理
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.算术操作符
    • 1.要点:
  • 二.负数原码,反码,补码的互推
    • 1.按位取反操作符:~(二进制位)
    • 2.原反补互推演示
  • 三.进制位的表示
    • 1.不同进制位的特征:
    • 2.二进制位表示
    • 3.整型的二进制表示
  • 四.移位操作符
    • 1.左移操作符
    • 2.右移操作符
  • 五.位操作符
    • 1.使用禁忌:
    • 2.位操作符一览:
    • 3.位操作符的注意要点:
    • 4.位操作符使用演示:
    • 5.位操作符的应用:“不创建临时变量实现两个数的交换”
    • 6.位操作符的应用:“求一个整数存储在内存的二进制中1的个数”
      • 法一:利用移位操作符
      • 法二: 利用二进制原理
  • 六.赋值操作符
    • 1.连续赋值(接收上一个运算的返回值)
    • 2.复合赋值符
  • 七.逻辑操作符
    • 1.逻辑操作符一览
    • 2.区分 “逻辑与或” 和 “按位与或”
    • 3.经典例题
      • 例1:逻辑与的“短路特性”——前面为0判定时,后面不操作
      • 例2:逻辑或的“反短路特性”——前面为真判定时,后面不操作
  • 八.单目操作符
    • 1.单目操作符一览
    • 2.sizeof特性与操作规范 (操作数的类型长度)
  • 九.其他操作符
    • 1.下标引用操作符
    • 2.函数引用操作符
    • 3.访问结构的成员操作符
  • 九.算术转换
  • 十.隐式类型转换
  • 1.概述:
    • 2.整型提升:
      • 一.正负数的整型提升
    • 3.截断:
  • 十一.问题表达式问题
  • 十二.逗号表达式
    • 1.逗号表达式
    • 2.逗号表达式的实际应用——简化代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档