操作符详解3

简介: 操作符详解3

✨✨ 欢迎大家来到莉莉的博文✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

        前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作

符,今天继续介绍一部分。

1.操作符的分类

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

• 移位操作符: <<  >>

• 位操作符:  &  |  ^

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

• 单目操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)

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

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

• 条件操作符: ?  :

• 逗号表达式: ,

• 下标引用: []

• 函数调用: ()

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

2.移位操作符

>>右移操作符

<<左移操作符

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

警告 :对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

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

2.1左移操作符

移位规则:左边抛弃、右边补0

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

最终结果为n ==20, num == 10。

如果想要num的值也改变,则可以使用复合赋值 num <<= 1;

从运行结果可以推出:左移一位有乘2的效果。

2.2右移操作符

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

1.逻辑右移:左边用0填充,右边丢弃

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

采用哪种运算规则由编译器决定,常见的编译器采用算术右移

与左移一位类似,右移一位有除2的效果,但也有例外 -1 >> 1的结果还是-1(算术右移)

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

3.位操作符

位操作符有:

  • &  //按位与        两个整数对应的二进制位如果有0,则为0
  • |  //按位或          两个整数对应的二进制位只要有1,则为1
  • ^  //按位异或      两个整数对应二进制位,相同为0,相异为1,异或的结果不会溢出,因为不会进位
  • ~  //按位取反      所有二进制位按位取反(包括符号位)

:他们的操作数必须是整数,操作的是二进制位。

按位异或通常的使用公式:

a ^ a==0

a ^ 0==a

位操作符需要与逻辑操作符进行区分:

&&   //逻辑或

||      //逻辑与

!    //逻辑取反

举例:

#include <stdio.h>
int main()
{
  int num1 = -3;
  int num2 = 5;
  printf("%d\n", num1 & num2);//3
  printf("%d\n", num1 | num2);//-5
  printf("%d\n", num1 ^ num2);//-8
  printf("%d\n", ~0);//-1
  return 0;
}

分析:

我们知道数据的计算是通过它的补码进行计算的

-3的原码:10000000000000000000000000000011

-3的反码:11111111111111111111111111111100

-3的补码:11111111111111111111111111111101

5的原反补 00000000000000000000000000000101

-3 & 5的补码:00000000000000000000000000000101

由于符号位为0,所以是正数,而正数的原反补相同,因此-3 & 5的结果是3

-3 | 5、-3 ^ 5以此类推,结果为-5、-8

~0的补码:11111111111111111111111111111111­

符号位是1,负数,所得补码的原码:10000000000000000000000000000001—>  -1

       移位操作符和位操作符很重要,总有些题用上它们秒变简单,这里举一些它们的使用场合。

(不能创建临时变量(第三个变量),实现两个数的交换:https://blog.csdn.net/wait___wait/article/details/136143074

4.单目操作符

单目操作符有这些:

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

单目操作符的特点是只有一个操作数,在单目操作符中只有&和*没有介绍,这2个操作符,我们放在学习指针的时候学习。单目操作符 https://blog.csdn.net/wait___wait/article/details/135242898

5.逗号表达式

exp1, exp2, exp3, …expN  

逗号表达式,就是用逗号隔开的多个表达式,如果表达式的结果要赋值给另一个变量,则在表达式的外面加上括号

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

//代码1
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1); //逗号表达式
c是多少?//13
 
//代码2
if (a = b + 1, c = a / 2, d > 0)
 
//代码3    冗长
a = get_val();
count_val(a);
while (a > 0)
{
  //业务处理
  a = get_val();
  count_val(a);
}
如果使用逗号表达式,代码3可改写成:
while (a = get_val(), count_val(a), a > 0)
{
  //业务处理
}

6.下标访问[]、函数调用()

6.1下标引用操作符 [ ]

下标引用操作符是一个双目操作符,可能你会很奇怪,明明中括号里面就一个操作数,为什么是双目操作符?那我们现在就先来看看它的操作数到底是哪些。

操作数:一个数组名+一个索引值(索引值就是数组的下标)

int arr[10]; //创建数组
arr[9] = 10; //实用下标引用操作符。
[ ]的两个操作数是arr和9

6.2函数调用操作符()

接受⼀个或者多个操作数:第⼀个操作数是函数名,剩余的操作数就是传递给函数的参数。

#include <stdio.h>
void test1()
{
  printf("hehe\n");
}
void test2(const char* str)
{
  printf("%s\n", str);
}
int main()
{
  test1(); //这⾥的()就是作为函数调⽤操作符。
  test2("hello bit."); //这⾥的()就是函数调⽤操作符。
  return 0;
}

                       写作不易,您的认同给与我莫大的鼓励!!!


目录
相关文章
|
3月前
|
人工智能 安全 5G
小米MiMo团队开源AI编程助手MiMo Code:MIT协议,终端原生Coding Agent
小米MiMo团队开源终端AI编程智能体MiMo Code(V0.1.0),MIT协议,支持持久记忆、无限上下文重建、Compose编排、多模型接入及语音输入。一键安装,限时免费MiMo-V2.5模型,直击长会话失忆与假完成痛点,推动Coding Agent从“模型比拼”转向“Harness+记忆+安全”新赛道。(239字)
965 0
|
9月前
|
传感器 搜索推荐 物联网
RFID打造宠物智能管理新模式
通过RFID技术为宠物建立独特的RFID电子"身份证",实现对宠物全生命周期的精细跟踪与详细记录,做到有据可查。RFID提供了精细的宠物数据跟踪能力,将宠物的生命历程、疫苗、健康状况等详细记录,使重要信息易于获取和管理。RFID技术通过为宠物建立唯一电子身份,实现精准识别与数据交互,RFID打造宠物智能管理新模式。
|
人工智能 监控 Linux
基于大牛直播SDK的无纸化同屏会议与智慧教室技术方案
本文探讨了利用大牛直播 SDK 打造无纸化同屏会议与智慧教室系统的技术方案。SDK 具备跨平台兼容性、超低延迟等优势,支持 RTMP 推流播放、RTSP 直播播放及多路流媒体转发等功能,满足实时互动需求。文章详细介绍了两种场景的系统架构与功能实现,并总结其技术优势,展望未来结合 AI 等技术的发展前景,推动现代办公与教育智能化升级。
464 7
|
9月前
|
存储 人工智能 NoSQL
2025阿里云高性能企业级云服务器 c9i/g9i/r9i 实例价格表及性能详细测评
在企业级云服务器选型中,计算性能、内存容量、网络稳定性及存储效率是核心考量维度。阿里云推出的九代云服务器实例(计算型 c9i、通用型 g9i、内存型 r9i),依托全新 CIPU 架构与英特尔 ® 至强 ®6 处理器,在高性能场景(如 AI 推理、大数据分析、高并发服务)中表现突出。本文将从实例性能特点、详细参数、价格体系及适用场景展开测评,为企业用户提供精准选型参考。
|
9月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
本文介绍Nexus Repository Manager OSS在Linux环境下的安装与配置,包括JDK8安装、Nexus部署、仓库管理、用户权限设置及密码重置方法。支持通过Docker快速部署,并实现数据持久化。同时涵盖Maven、NPM、Docker等组件的私服搭建与资源上传下载配置,助力企业构建高效私有仓库体系。(239字)
760 0
|
9月前
|
JSON BI API
拼多多API助力,实现商品批量管理,提高运营效率!
本文详解如何利用拼多多API实现商品批量管理,涵盖自动化上架、调价、库存同步、数据获取及系统集成,显著提升运营效率,降低人工成本,助力商家实现精细化、智能化运营。
1343 0
|
项目管理 vr&ar 图形学
怎么将两个模型合并成一个?
当你需要将多个3D模型组合为一个整体,简化管理、提高渲染性能或实现特定的效果时,合并模型是一个有用的工具和技术。
1171 1
Github邮件联系项目源代码作者简单方法
Github邮件联系项目源代码作者简单方法
2911 0
Github邮件联系项目源代码作者简单方法
|
数据可视化 项目管理
甘特图是什么?任务进程管理神器
甘特图是项目管理中的可视化工具,通过时间轴与任务列表展现项目进度和任务分配,支持任务间的依赖关系和里程碑设置,适用于项目管理、团队协作、日常任务安排及科研计划等多种场景,有效提升项目管理和团队协作效率。
2635 4
|
运维 Kubernetes Docker
Kubernetes 1.24 1.25 集群使用docker作为容器
在新版本Kubernetes环境(1.24以及以上版本)下官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番。需要安装cri-docker作为Kubernetes容器
3234 2

热门文章

最新文章