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

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

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

目录

一.算术操作符

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:无法判断三个fun( )哪个先执行

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

十二.逗号表达式

1.逗号表达式

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


一.算术操作符

+    -    *    /   %


1.要点: 

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

        (5.0/2——>2.5)


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


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

~:二进制位0变1,1变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
  • 运算后不会发生进位
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结果之和

代码演示: 

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.逗号表达式的实际应用——简化代码

优化前:

a=get_val();
count_val(a);
while(a>0)
{
   业务处理
   a=get_val();
   count_val(a);
}

优化后:

a=get_val();
count_val(a);
while(a=get_val(),count_val(a),a>0)
{
   业务处理
}

猜你喜欢

转载自blog.csdn.net/YYDsis/article/details/130464702
今日推荐