初入操作符(基础)

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

前言

重点:

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


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)
1700 0
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
507 1
性能工具之代码级性能测试工具ContiPerf
|
Java mybatis 数据库连接
java代码之美(13)--- Predicate详解
java代码之美(13)--- Predicate详解遇到Predicate是自己在自定义Mybatis拦截器的时候,在拦截器中我们是通过反射机制获取对象的所有属性,再查看这些属性上是否有我们自定义的UUID注解。
1308 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
519 14
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
888 109
|
5天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。