初入操作符(基础)

简介: 初入操作符(基础)

前言

重点:

位移操作符和逻辑在操作符


1. 操作符的分类

• 算术操作符: + 、- 、* 、/ 、%

• 移位操作符: << >>

• 位操作符: & | ^ `

• 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=

• 单⽬操作符: !、++、–、&、、+、-、~ 、sizeof

• 关系操作符: > 、>= 、< 、<= 、 == 、 !=

• 逻辑操作符: && 、||

• 条件操作符: ? :

• 逗号表达式: ,

• 下标引⽤: []

• 函数调⽤: ()

• 结构成员访问:. 、->


以上操作符有很多之前就学习过,这篇博客就学习一些没有学习过的


2. 移位操作符

1.<< 左移操作符

2.>> 右移操作符

注:移位操作符的操作数只能是整数

2.1左移操作符

#include <stdio.h>
int main()
{
  int num = 10;
  int n = num<<1;//2进制左移1位
  printf("n= %d\n", n);
  printf("num= %d\n", num);
  return 0;
}

0e9710dbbfab44dfb040cfae0df5db4d.png


2.2 右移操作符

移位规则:⾸先右移运算分两种:


逻辑右移:左边⽤0填充,右边丢弃

算术右移:左边⽤原该值的符号位填充,右边丢弃

扩展:vs里面是算数右移


案例:


#include <stdio.h>
int main()
{
  int num = 10;
  int n = num>>1;
  printf("n= %d\n", n);
  printf("num= %d\n", num);
  return 0;
}


----------------------------- 逻辑右移 -------------------------------

061fac723a504d6286f932ab4f3e067f.png

------------------------------ 算术右移 ------------------------------

21149f8d84a84583ab1e868fd2258646.png

错误输入案例:


int num = 10;
num>>-1;//error


对于移位运算符,不要移动负数位,这个是编译器未定义的。


3. 位操作符:&、|、^、~

& --> 按位与

| --> 按位或

^ --> 按位异或

~ --> 按位取反

注意:他们的操作数必须是整数。

交换变量不创建第三变量:

案例1:


#include <stdio.h>
int main()
{
  int a = 10;
  int b = 20;
  a = a^b;
  b = a^b;//(a ^ b) ^ b == a
  a = a^b;(a ^ b) ^ ( a ) == b
  printf("a = %d b = %d\n", a, b);
  return 0;
}


案例2:


#include <stdio.h>
int main()
{
  int a = 10;
  int b = 20;
  a = a + b;
  b = a - b;//(a + b) - b == a
  a = a - b;//(a + b) - ( a ) == b
  printf("a = %d b = %d\n", a, b);
  return 0;
}


所以说:并不是没有办法,而是看到未知的恐惧,一切的恐惧都来源于实力不足

有关2进制的学习


题目:求⼀个整数存储在内存中的⼆进制中1的个数


分析:2进制中最容易得到的是最后一位,只要 n (整数)& 1,如果 n & 1 == 1,则说明最后一位是 1,反之为 0,

然后n移动就可以,算出所有位数。

原理:

3d9741d39eab43f5981d99a21df0419a.png


代码实现:


#include <stdio.h>
int main()
{
  int num = -1;
  int i = 0;
  int count = 0;//计数
  for(i=0; i<32; i++)
  {
    if((nnm >> i) & 1 == 1)
    //if( num & (1 << i) )//也可以把1向左移动,得到1则加1,0则跳过
    count++; 
  }
    printf("⼆进制中1的个数 = %d\n",count);
    return 0;
}


第2种方法:

8b952fcac5e04870acfb222623b95c04.png

像这样的:


#include <stdio.h>
int main()
{
  int num = 10;
  int count= 0;//计数
  while(num)
  {
    if(num%2 == 1)
    count++;
    num = num/2;
  }
  printf("⼆进制中1的个数 = %d\n", count);
  return 0;
}


第3种方法


#include <stdio.h>
int main()
{
  int num = -1;
  int i = 0;
  int count = 0;//计数
  while(num)
  {
    count++;
    num = num&(num-1);//2进制位每次-1,2进制少一个1,一直到把所有1借出为止
  printf("⼆进制中1的个数 = %d\n",count);
  return 0;
}


这种⽅式是不是很好?达到了优化的效果,但是难以想到


4. ⼆进制位置0或者置1

编写代码将13⼆进制序列的第5位修改为1,然后再改回0


13的2进制序列: 00000000000000000000000000001101
将第5位置为1后:00000000000000000000000000011101
将第5位再置为0:00000000000000000000000000001101


代码演示:


#include <stdio.h>
int main()
{
  int a = 13;
  a = a | (1<<4);//把1向左移动
  printf("a = %d\n", a);
  a = a & ~(1<<4);
  printf("a = %d\n", a);
  return 0;
}


原理:

e9155141e0124753a4a5281229a301a6.png


5. 单⽬操作符

单⽬操作符有这些:

!、++、–、&、、+、-、~ 、sizeof、(类型)

单⽬操作符的特点是只有⼀个操作数,在单⽬操作符中只有&和没有介绍,这2个操作符,我们放在学

习指针的时候学习。


6. 逗号表达式

逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。


相关文章
|
自然语言处理 监控 Cloud Native
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
1775 0
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
539 1
性能工具之代码级性能测试工具ContiPerf
|
存储 缓存 开发框架
geoserver+全能下载器 发布离线地图
geoserver+全能下载器 发布离线地图
|
Java mybatis 数据库连接
java代码之美(13)--- Predicate详解
java代码之美(13)--- Predicate详解遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义的UUID注解。
1363 0
|
3天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
13天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
523 205
|
2天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
211 138
下一篇
oss云网关配置