C语言 -- 操作符详解​

news2025/1/10 23:31:40

C语言 -- 操作符详解​

  • 1. 操作符的分类
  • 2. 二进制和进制转换​
  • 2.1 2进制转10进制​
      • 2.1.1 10进制转2进制数字​
    • 2.2 2进制转8进制和16进制​
      • 2.2.1 2进制转8进制​
      • 2.2.2 2进制转16进制​
  • 3. 原码、反码、补码​
  • 4. 移位操作符​
    • 4.1 左移操作符​
  • 4.2 右移操作符​
  • 5. 位操作符:&、|、^、~​
  • 6. 单目操作符
  • 7. 逗号表达式​
  • 8. 下标访问[]、函数调用()​
    • 8.1 [ ] 下标引用操作符​
    • 8.2 函数调用操作符 ​

1. 操作符的分类

• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << >> ​
• 位操作符: & | ^ `​
• 赋值操作符: = 、+= 、 -= 、 * = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^= ​
• 单目操作符: !、++、–、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 != ​
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引用: []
• 函数调用: ()
• 结构成员访问: . 、->
上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符,今天继续介绍一部分,操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。

2. 二进制和进制转换​

其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。​
比如:数值15的各种进制的表示形式:​
在这里插入图片描述
我们重点介绍一下二进制:
首先我们还是得从10进制讲起,其实10进制是我们生活中经常使用的,我们已经形成了很多尝试:​
• 10进制中满10进1​
• 10进制的数字每一位都是0~9的数字组成​
其实二进制也是一样的
• 2进制中满2进1​
• 2进制的数字每一位都是0~1的数字组成​
那么 1101 就是二进制的数字了。

2.1 2进制转10进制​

其实10进制的123表示的值是一百二十三,为什么是这个值呢?其实10进制的每一位是权重的,10进制的数字从右向左是个位、十位、百位…,分别每一位的权重是​10的零次方 , 10的一次方 , 10的二次方 … ​
如下图:
在这里插入图片描述
2进制和10进制是类似的,如果是2进制的1101,该怎么理解呢?​
如下图:
在这里插入图片描述

2.1.1 10进制转2进制数字​

在这里插入图片描述

2.2 2进制转8进制和16进制​

我们需要先了解一下:
在这里插入图片描述

2.2.1 2进制转8进制​

进制的数字每一位是0 ~ 7的,0 ~ 7的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。​
在这里插入图片描述
下面是一个八进制的数字就%d打印出来:
在这里插入图片描述

2.2.2 2进制转16进制​

16进制的数字每一位是0 ~ 9,a ~ f 的,0~9,a ~ f的数字,各自写成2进制,最多有4个2进制位就足够了,比如 f 的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算一个16进制位,剩余不够4个二进制位的直接换算。​
在这里插入图片描述

3. 原码、反码、补码​

  • 整数的2进制表示方法有三种,即原码、反码和补码​
  • 有符号整数的三种表示方法均有符号位数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
  • 符号位都是用0表示“正”,用1表示“负”。​
  • 正整数的原、反、补码都相同。
  • 负整数的三种表示方法各不相同。

原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。​

反码得到原码也是可以使用:取反,+1的操作。​

例子1:
在这里插入图片描述

例子2:
在这里插入图片描述

对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
在这里插入图片描述
下面举个例子:
在这里插入图片描述
注意:
在这里插入图片描述

4. 移位操作符​

在这里插入图片描述

4.1 左移操作符​

移位规则:左边抛弃、右边补0​
例子如下:
在这里插入图片描述
图示:
在这里插入图片描述

4.2 右移操作符​

移位规则:首先右移运算分两种:
在这里插入图片描述
例子如下:
在这里插入图片描述
以%d形式打印的是原码
图示:逻辑右移演示
在这里插入图片描述
算数右移演示:
在这里插入图片描述
:右移到底是算数右移还是逻辑右移取决于编译器的实现,大部分的编译器上是算数右移,在VS2022上采用的算数右移。
警告⚠️:对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:
在这里插入图片描述

5. 位操作符:&、|、^、~​

位操作符有:

&------ >按位与​
| -------->按位或
^ ------->按位异或​
~ ------>按位取反

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

按位与计算规则:

对应的二进制位进行与运算,只要有0就是0,两个同时为1才是1

例子:
在这里插入图片描述
按位或计算规则

对应的二进制位进行或运算,只要有1就是1,两个同时为0才是0

例子:
在这里插入图片描述
按位异或计算规则

对应的二进制位进行异或运算,相同为0,相异为1

例子:
在这里插入图片描述
按位取反 ~
例子:
在这里插入图片描述
一道变态的面试题:
不能创建临时变量(第三个变量),实现两个数的交换。
在这里插入图片描述
异或操作符的特点:

a^a = 0
0^a = a

练习1编写代码实现:求一个整数存储在内存中的二进制中1的个数。​
方法一:
在这里插入图片描述
方法二:
在这里插入图片描述
方法三:
首先的先明白一个知识:

// n = n & (n - 1)
效果:把n的二进制中最右边的1去掉了
//n=15
//1111 - n
//1110 - n-1
//1110 - n
//1101 - n-1
//1100 - n
//1011 - n-1
//1000 - n
//0111 - n-1
//0000 - n

代码例子:
在这里插入图片描述
练习2:判断一个数n是否是2的次方数
特点:

//000001
//000010
//000100
//001000
//…

代码:
在这里插入图片描述
练习2:二进制位置0或者置1​
编写代码将13二进制序列的第5位修改为1,然后再改回0​
在这里插入图片描述
在这里插入图片描述

6. 单目操作符

在这里插入图片描述

7. 逗号表达式​

在这里插入图片描述
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
例子:
在这里插入图片描述

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

8.1 [ ] 下标引用操作符​

操作数:一个数组名 + 一个索引值 ​
在这里插入图片描述

8.2 函数调用操作符 ​

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
例子:
在这里插入图片描述
注意:sizeof是操作符,不是函数
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1898022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cannot resolve symbol ‘log`

idea里的代码log变红色&#xff0c;是因为缺少Lombok插件。 安装lombok插件即可。安装完应用&#xff0c;重启软件就好了。 依次点击菜单栏中的 File → Settings&#xff08;Windows/Linux&#xff09; 或 IntelliJ IDEA → Preferences&#xff08;macOS&#xff09;。在设置…

“区间优化:贪心算法在区间问题中的应用“

1. 区间选点 给定 &#x1d441; 个闭区间 [&#x1d44e;&#x1d456;,&#x1d44f;&#x1d456;]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第…

MySQL之备份与恢复(六)

备份与恢复 文件系统快照 先决条件和配置 创建一个快照的消耗几乎微不足道&#xff0c;但还是需要确保系统配置可以让你获取在备份瞬间的所有需要的文件的一致性副本。首先&#xff0c;确保系统满足下面这些条件。 1.所有的InnoDB文件(InnoDB的表空间文件和InnoDB的事务日志…

20.5.【C语言】求长度的两种方式

1.sizeof 用于测数据类型的长度的函数&#xff08;详细见第3篇&#xff09; 2.strlen 其计算长度时只有遇到\0才会停止&#xff0c;并且\0不会计算在内 如char arr[]{a,1,b}; printf("%d\n",strlen(arr)); 结果是个随机数&#xff01;strlen读内存中的数据&…

C++ 类和对象 构造函数

一 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 例&#xff1a; #include <iostream> class Empty {// 空类&#xff0c;什么成员都没有 }; 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&a…

绘唐科技聚星文社是同款一键生成工具

聚星文社是同款一键生成工具 工具下载 绘唐科技成立于2015年&#xff0c;是一家专注于虚拟现实&#xff08;VR&#xff09;技术和产品开发的高科技企业。绘唐科技的目标是利用虚拟现实技术为人们带来更加沉浸式的体验&#xff0c;推动虚拟现实在各个领域的应用和发展。 绘唐科…

【博士每天一篇文献-算法】Adult neurogenesis acts as a neural regularizer

阅读时间&#xff1a;2023-12-20 1 介绍 年份&#xff1a;2022 作者&#xff1a;Lina M. Tran&#xff0c;Adam Santoro&#xff0c;谷歌DeepMind 期刊&#xff1a; Proceedings of the National Academy of Sciences 引用量&#xff1a;13 代码&#xff1a;https://github.c…

QT的编译过程(底层逻辑)

qmake -project 用于从源代码生成项目文件&#xff0c;qmake 用于从项目文件生成 Makefile&#xff0c;而 make 用于根据 Makefile 构建项目。 详细解释&#xff1a; qmake -project 这个命令用于从源代码目录生成一个初始的 Qt 项目文件&#xff08;.pro 文件&#xff09;。它…

2024年软件测试面试题大全【含答案】

一、面试基础题 简述测试流程: 1、阅读相关技术文档&#xff08;如产品PRD、UI设计、产品流程图等&#xff09;。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例&#xff08;等价类划分法、边界值分析法等&#xff09;。 5、用例评审(…

Xshll连接服务器【过程记录】

背景&目标 开学老师提供了一款服务器&#xff0c;可以网页端打开&#xff0c;但是不可进行上传文件、复制黏贴指令。 希望连接Xshll进行更有效的学习活动&#xff01; 配置过程 一、已知信息 二、配置 使用第一部分&#xff0c;先打通隧道。 【选择公钥时&#xff0c;没…

2024年【四川省安全员B证】考试及四川省安全员B证考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【四川省安全员B证】考试及四川省安全员B证考试题&#xff0c;包含四川省安全员B证考试答案和解析及四川省安全员B证考试题练习。安全生产模拟考试一点通结合国家四川省安全员B证考试最新大纲及四川省安全员B证…

掌握XD数字设计:打造令人惊艳的用户体验

xd是adobe旗下一款主打UI界面设计-建立原型的软件&#xff0c;它可以将wireframe、design、以及prototype等UI/UX设计流程整合到一个软件中&#xff0c;算是一款与sketch对打的软件。 与PS相比&#xff0c;在UI设计方面&#xff0c;Adobe XD有非常突出的3个优点&#xff1a;能…

【C++】哈希表 ---开散列版本的实现

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 开散列版本的实现 1 前言2 开散列版本的实现2.1 节点设计2.2 框架搭建2.3 插入函数2.4 删除函数2.5 查找操作2.6 测试 Thanks♪(&#xff65;ω&#x…

亚信安全:《2024云安全技术发展白皮书》

标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进&#xff0c;探讨了云安全技术的发展历程、当前应用和未来趋势&#xff0c;强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进&#xff…

贪吃蛇——C语言(VS2022含源代码,及源代码zip文件)

一.游戏背景 贪吃蛇是一款在世界上盛名已久的小游戏&#xff0c;贪食蛇游戏操作简单&#xff0c;可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候&#xff0c;而是开始。那个时候蛇身很短&#xff0c;看上去难度不大&#xff0c;却最容易死掉&#xff0c;因为把玩一条小…

生产力工具|viso常用常见科学素材包

一、科学插图素材网站 一图胜千言&#xff0c;想要使自己的论文或重要汇报更加引人入胜&#xff1f;不妨考虑利用各类示意图和科学插图来辅助研究工作。特别是对于新手或者繁忙的科研人员而言&#xff0c;利用免费的在线科学插图素材库&#xff0c;能够极大地节省时间和精力。 …

基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1步态识别系统框架 4.2 CNN原理及数学表述 4.3 CASIA步态数据库 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 1.训练过程 2.样本库 3.提取的步态能量图 4.步态识…

【YOLOv5/v7改进系列】改进池化层为ASPP

一、导言 Atrous Spatial Pyramid Pooling (ASPP)模块是一种用于多尺度特征提取的创新技术&#xff0c;旨在提升深度学习模型在语义图像分割任务中的表现。ASPP模块通过在不同的采样率下应用空洞卷积&#xff0c;可以捕获不同大小的对象以及图像的上下文信息&#xff0c;从而增…

Activity、Window、DecorView的关系

目录 一、Activity、Window、DecorView的层级关系如下图所示&#xff1a; 1、Activity 2、Window 3、DecorView 二、DecorView初始化相关源码 三、DecorView显示时机 前言&#xff1a; 不同的Android版本有差异&#xff0c;以下基于Android 11进行讲解。 一、Activi…

昇思25天学习打卡营第13天|linchenfengxue

Diffusion扩散模型 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;本文的介绍是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已经在&#xff08;无&#xff09;条件图像/音频/视频生成领域取得…