C语言——操作符详解1
目录
- 1. 操作符的分类
- 2. 二进制和进制转换
- 2.1 二进制的概念
- 2.2 二进制转十进制
- 2.3 十进制转二进制
- 2.4 二进制转八进制和十六进制
- 2.4.1 二进制转八进制
- 二进制转十六进制
- 3. 原码、反码和补码
- 4. 移位操作符
- 4.1 左移操作符
- 4.2 右移操作符
- 5. 位操作符
- 5.1 &
- 5.2 |
- 5.3 ^
- 5.4 ~
1. 操作符的分类
- 算数操作符:+ 、- 、* 、/ 、%
- 移位操作符: << 、 >>
- 位操作符: &、 |、 ^ 、 `
- 赋值操作符:= 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
- 单⽬操作符: !、++、–、&、*、+、-、~ 、sizeof、(类型)
- 关系操作符: > 、>= 、< 、<= 、 == 、 !=
- 逻辑操作符: && 、||
- 条件操作符: ? 、:
- 逗号表达式: ,
- 下标引⽤: [ ]
- 函数调⽤: ( )
- 结构成员访问: . 、->
2. 二进制和进制转换
2.1 二进制的概念
- 其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。
- 比如:数值15的各种进制的表示形式:

- 我们重点介绍一下二进制:
- 首先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使用的,我们已经形成了很多尝试:
- 10进制中满10进1
- 10进制的数字每⼀位都是0~9的数字组成
- 其实二进制也是一样的
- 2进制中满2进1
- 2进制的数字每⼀位都是0~1的数字组成
2.2 二进制转十进制
- 其实10进制的123表⽰的值是⼀百⼆十三,为什么是这个值呢?其实10进制的每⼀位是权重的,10进制的数字从右向左是个位、十位、百位…,分别每⼀位的权重是10的零次,10的一次,10的二次……如下图:

- 2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是:2的零次,2的一次,2的两次……
- 如果是2进制的1101,该怎么理解呢?如下图:

2.3 十进制转二进制

2.4 二进制转八进制和十六进制
2.4.1 二进制转八进制
- 8进制的数字每⼀位是0-7,把0~7的数字各自写成2进制,最多有3个2进制位就足够了,比如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算。
- 如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。

二进制转十六进制
- 16进制的数字每⼀位是0-9,a-f,把0-9,a~f的数字各自写成2进制,最多有4个2进制位就足够了,比如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。
- 如:2进制的 01101011,换成16进制:0x6b,16进制表示的时候前面加 0x

3. 原码、反码和补码
- 整数的2进制表示方法有三种,即原码、反码和补码
- 有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
- 符号位都是用 0 表示“正”,用 1 表示“负”。
- 正整数的原、反、补码都相同。
- 负整数的三种表示方法各不相同。
- 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
- 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
- 补码:反码+1就得到补码。(补码得到原码也是可以使用:取反,+1的操作。)
- 对于整形来说:数据存放内存中其实存放的是补码。为什么呢?
- 在计算机系统中,数值⼀律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
4. 移位操作符
- 左移操作符为 <<
- 右移操作符为 >>
- 注:移位操作符的操作数只能是整数
4.1 左移操作符
- 移位规则:左边抛弃、右边补0
#include <stdio.h>
int main()
{int num = 10;int n = num<<1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}

- 输出结果为:

4.2 右移操作符
- 移位规则:首先右移运算分两种:
- 逻辑右移:左边用0填充,右边丢弃
- 算术右移:左边用原该值的符号位填充,右边丢弃(一般都为这个规则)
- 注:对于移位运算符,不要移动负数位,这个是标准未定义的。
- 例如:
int num = 10;
num>>-1;//错误的表示方法
5. 位操作符
- 位操作符有:&( 按位与)、| (按位或 )、^ ( 按位异或)、~ (按位取反)
- 注:他们的操作数必须示整数
#include <stdio.h>
int main()
{int num1 = -3;int num2 = 5;printf("%d\n", num1 & num2);printf("%d\n", num1 | num2);printf("%d\n", num1 ^ num2);printf("%d\n", ~0);return 0;
}
5.1 &
- 计算规则是首先将操作数都变成补码,然后每一位按 “ 全1为1,有0为0 ”的规则得到新的补码序列,最后求出原码,如下图:

- 最后按位与后的结果就是 5
5.2 |
- 这个先对于按位与的区别是,计算规则是“ 有1为1,全0为0 ”

- 可以看到按位或后的结果是 -3
5.3 ^
- 按位异或的计算规则是“ 相同为0,不同为1 ”

- 可以看到按位异或后的结果为 -8
5.4 ~
- 按位取反的操作数只有一个
- 计算规则是:把每一位都取反,即 1变0 ,0变1

- 可以看到 0 按位取反后的结果是 -1
- 所以运行后的结果为:

最后,
恭喜你又遥遥领先了别人!

相关文章:
C语言——操作符详解1
目录 1. 操作符的分类2. 二进制和进制转换2.1 二进制的概念2.2 二进制转十进制2.3 十进制转二进制2.4 二进制转八进制和十六进制2.4.1 二进制转八进制二进制转十六进制 3. 原码、反码和补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符5.1 &5.2 |5.3 ^5.4 ~ 1. …...
C++学习| QT快速入门
QT简单入门 QT Creater创建QT项目选择项目类型——不同项目类型的区别输入项目名字和路径选择合适的构建系统——不同构建系统的却别选择合适的类——QT基本类之间的关系Translation File选择构建套件——MinGW和MSVC的区别 简单案例:加法器设计界面——构建加法器界…...
Android App开发-简单控件(1)——文本显示
本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识,完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍…...
[GYCTF2020]Ezsqli1
打开环境,下面有个提交表单 提交1,2有正确的查询结果,3以后都显示Error Occured When Fetch Result. 题目是sql,应该考察的是sql注入 简单fuzz一下 发现information_schema被过滤了,猜测是盲注了。 测试发现只要有东…...
【npm包】如何发布自己的npm包
随着Node.js的普及,npm(Node Package Manager)已成为JavaScript开发者中不可或缺的一部分。发布自己的npm包,不仅可以将自己的项目分享给更多人,还可以为社区做出贡献。本文将详细介绍如何从零开始发布自己的npm包。 …...
《WebKit技术内幕》学习之十五(2):Web前端的未来
2 嵌入式应用模式 2.1 嵌入式模式 读者可能会奇怪本章重点表达的是Web应用和Web运行平台,为什么会介绍嵌入式模式(Embedded Mode)呢?这是因为很多Web运行平台是基于嵌入式模式的接口开发出来的,所以这里先解释一下什…...
【教学类-综合练习-11】20240116 大4班 最后一次
只有图片 加了两条链接 背景需求 年终了,清理库存,各种打印的题型纸都拿出来,当个别化学习材料 教学过程: 时间:2024年1月5日下午 班级:大4班(额外带班 真正的最后一次大班) 人…...
【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用
文章目录 📄前言一. 阻塞队列初了解🍆1. 什么是阻塞队列?🍅2. 为什么使用阻塞队列?🥦3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现🍚1. 实现普通队列🍥2. 实现队列的阻塞功…...
Cocos Creator使用VS Code调试代码配置
创建项目 首先我们先打开cocos创建一个项目 随便添加一个Cube和脚本,然后保存场景: 添加Chrome Debug配置 在Cocos 中选择添加Chrome Debug配置 然后再VS Code中就可以看到有一个cocos launch Chrome: 然后,就可以按快捷键F…...
【投稿优惠|EI优质会议】2024年材料化学与清洁能源国际学术会议(IACMCCE 2024)
【投稿优惠|优质会议】2024年材料化学与清洁能源国际学术会议(IACMCCE 2024) 2024 International Conference Environmental Engineering and Mechatronics Integration(ICEEMI 2024) 一、【会议简介】 随着全球能源需求的不断增长,清洁能源的研究与应用成为了国际…...
ubuntu设置右键打开terminator、code
前言: 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一:右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…...
PHP AES加解密:用代码为数据加上保护的盾牌
在网络世界里,数据的传输和存储是一个敏感而重要的问题。为了保护数据的安全性,加密算法是一项不可或缺的技术。而在PHP中,AES(Advanced Encryption Standard)加解密算法是一种常用的选择。本篇博客将深入解析PHP中的A…...
Socket实现服务器和客户端
Socket 编程是一种用于在网络上进行通信的编程方法,以下代码可以实现在不同主机之间传输数据。 Socket 编程中服务器端和客户端的基本步骤:服务器端步骤: 1.创建 Socket: int serverSocket socket(AF_INET, SOCK_STREAM, 0);…...
智能GPT图书管理系统(SpringBoot2+Vue2)、接入GPT接口,支持AI智能图书馆
☀️技术栈介绍 ☃️前端主要技术栈 技术作用版本Vue提供前端交互2.6.14Vue-Router路由式编程导航3.5.1Element-UI模块组件库,绘制界面2.4.5Axios发送ajax请求给后端请求数据1.2.1core-js兼容性更强,浏览器适配3.8.3swiper轮播图插件(快速实…...
面试经典 150 题 ---- 合并两个有序数组
面试经典 150 题 ---- 合并两个有序数组 合并两个有序数组方法一:直接合并后排序方法二:双指针方法三:逆向双指针 合并两个有序数组 方法一:直接合并后排序 这种方法最简单,直接将 nums2 的数组放到 nums1 数组的尾部…...
防火墙在企业园区出口安全方案中的应用(ENSP实现)
拓扑图 需求: 1、企业出口网关设备必须具备较高的可靠性,为了避免单点故障,要求两台设备形成双机热备状态。当一台设备发生故障时,另一台设备会接替其工作,不会影响业务正常运行。 2、企业从两个ISP租用了两条链路&…...
单片机学习笔记---矩阵键盘密码锁
目录 一,设置密码按键 1.设置密码区域 2.设置输入的数字左移 3.设置记录按键的次数 二,设置确认键 1.密码正确时显示OK 2.密码错误时显示ERR 3.密码错误恢复初始状态重输 三,设置取消键 学了这么久,迫不及待想要做一个密…...
8-小程序数据promise化、共享、分包
小程序API Promise化 wx.requet 官网入口 默认情况下,小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…...
[HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...
Threejs 展示——obj 格式模型导入
文章目录 需求分析1. HTML版本2. Vue 版本 需求 导入obj 格式的模型数据 分析 .obj:Wavefront OBJ 格式,是一种广泛使用的三维模型文件格式。预览 .obj格式文件的软件可点此下载需要准备两种格式的数据,如下所示 1. HTML版本 html <!…...
开源项目依赖管理:从冲突解决到高效协作的实践指南
开源项目依赖管理:从冲突解决到高效协作的实践指南 【免费下载链接】IPED IPED Digital Forensic Tool. It is an open source software that can be used to process and analyze digital evidence, often seized at crime scenes by law enforcement or in a corp…...
STM32硬件定时器中断库:零HAL依赖多实例调度
1. 项目概述STM32_TimerInterrupt是一个面向 STM32 全系列微控制器(覆盖 F0/F1/F2/F3/F4/F7/L0/L1/L4/G0/G4/H7/WB/MP1 等主流型号)的轻量级、高可靠硬件定时器中断驱动库。其核心设计目标是在不依赖 HAL 库底层阻塞逻辑的前提下,提供稳定、低…...
LeetCode1170题解:预处理+二分查找
LeetCode第1170题[比较字符串最小字母出现频次] 典型的先预处理,再二分统计 题目本质: 对于每个 queries[i],计算:有多少个 word 满足 f(queries[i]) < f(word) 也就是:先求出查询串的 f 再去 words 里数有多少个…...
从零开始:在VMware虚拟机上部署FreeNAS的完整指南
1. 为什么选择在VMware上部署FreeNAS? 如果你正在寻找一个经济实惠又灵活的NAS解决方案,在VMware虚拟机上跑FreeNAS绝对是个明智的选择。我最早接触这个方案是在帮朋友搭建家庭媒体中心时,当时用实体机装FreeNAS总觉得太浪费硬件资源…...
开源IT资产管理系统Snipe-IT:从混乱到有序的数字化转型之路
开源IT资产管理系统Snipe-IT:从混乱到有序的数字化转型之路 【免费下载链接】snipe-it A free open source IT asset/license management system 项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it 在企业数字化进程中,IT资产如同散落的…...
开源社区运营:Qwen1.5-1.8B GPTQ自动回复GitHub Issues与生成Release Note
开源社区运营:用Qwen1.5-1.8B GPTQ自动回复GitHub Issues与生成Release Note 如果你在维护一个开源项目,下面这些场景你一定不陌生:每天打开GitHub,通知栏里又多了几十条未读Issues,有报Bug的,有提新功能想…...
PX4无人机仿真入门:XTDrone平台从安装到自定义机型的完整指南
PX4无人机仿真入门:XTDrone平台从安装到自定义机型的完整指南 无人机仿真技术已成为现代航空研发的重要工具,而PX4作为开源飞控系统的代表,配合XTDrone仿真平台,为开发者提供了高效、安全的测试环境。本文将带您从零开始ÿ…...
AudioSeal Pixel Studio快速部署:Jetson Orin边缘设备上的ARM64适配与性能实测
AudioSeal Pixel Studio快速部署:Jetson Orin边缘设备上的ARM64适配与性能实测 1. 项目背景与核心价值 AudioSeal Pixel Studio是一款基于Meta开源的AudioSeal算法构建的专业音频水印工具。它能够在保持原始音质几乎不变的前提下,为音频文件嵌入隐形数…...
AnimateDiff开源贡献:PyTorch核心代码解读与修改
AnimateDiff开源贡献:PyTorch核心代码解读与修改 1. 引言 如果你对AI视频生成感兴趣,可能已经听说过AnimateDiff这个强大的文生视频框架。它能够将静态的文字描述转化为生动的视频内容,效果相当惊艳。但你是否想过,这个看似神秘…...
Sqoop --merge-key参数深度解析:增量数据合并的终极利器
Sqoop --merge-key参数深度解析:增量数据合并的终极利器引言1. --merge-key参数概述1.1 基本概念1.2 为什么需要--merge-key?2. --merge-key的工作原理2.1 执行流程2.2 数据合并逻辑3. 使用场景详解3.1 场景一:lastmodified模式下的自动合并3…...
