学懂C语言(十二):C语言中的二进制原理及应用
目录
1. 二进制原理
1.1 什么是二进制?
1.2 如何在C语言中表示二进制?
2. 二进制的表示
2.1 二进制和其他进制的转换
2.2 C语言中的二进制表示
3. 二进制运算
3.1 位运算符
3.2 计算过程示例
4. 应用示例
4.1 使用位运算实现开关
5. 总结
C语言中的二进制原理是计算机科学的基础之一,因为计算机内部使用二进制系统来表示数据和执行运算。以下是关于C语言中二进制的详细讲解,包括其原理、表示、计算过程及应用示例。
1. 二进制原理
1.1 什么是二进制?
二进制是一种数值系统,仅使用两个数字:0和1。相对于十进制(使用0到9的数字),二进制系统的每一位数的权值是2的幂次方。例如,二进制数1011
表示:
- 1×23+0×22+1×21+1×20=8+0+2+1=111×23+0×22+1×21+1×20=8+0+2+1=11(十进制)
1.2 如何在C语言中表示二进制?
在C语言中,整型数据在内存中以二进制形式存储。可以通过以下方法表示二进制:
- 十进制直接表示:如
int a = 11;
表示十进制11。 - 使用位运算:可以通过位运算来操作二进制数据。
2. 二进制的表示
2.1 二进制和其他进制的转换
二进制可以与十进制、八进制和十六进制互相转换:
-
十进制转二进制: 将十进制数不断除以2,直到商为0,记录下余数,最后将余数反向排列。
- 示例:十进制11转二进制
- 11 ÷ 2 = 5 余 1
- 5 ÷ 2 = 2 余 1
- 2 ÷ 2 = 1 余 0
- 1 ÷ 2 = 0 余 1
- 反向排列为
1011
- 示例:十进制11转二进制
-
二进制转十进制: 根据二进制位的权值计算。
- 示例:
1011
转十进制- 1×23+0×22+1×21+1×20=111×23+0×22+1×21+1×20=11
- 示例:
2.2 C语言中的二进制表示
C语言并不直接支持二进制字面量,但可以使用宏或位运算进行操作。C11标准引入了0b
前缀来表示二进制字面量(某些编译器支持)。
3. 二进制运算
3.1 位运算符
C语言提供了一系列位运算符,用于直接操作二进制位。包括:
- 按位与(
&
):相同位均为1,结果为1。 - 按位或(
|
):任一位为1,结果为1。 - 按位异或(
^
):相同位为0,不同位为1。 - 按位取反(
~
):0变1,1变0。 - 左移(
<<
):将位向左移动,低位补0,相当于乘以2的n次方。 - 右移(
>>
):将位向右移动,符号位处理(算术右移或逻辑右移)。
3.2 计算过程示例
以下是一些位运算的计算过程示例:
示例 1:按位与
int a = 12; // 二进制:0000 1100
int b = 5; // 二进制:0000 0101
int result = a & b; // 结果:0000 0100 (4)
示例 2:按位或
int result = a | b; // 结果:0000 1101 (13)
示例 3:按位异或
int result = a ^ b; // 结果:0000 1001 (9)
示例 4:左移
int result = a << 2; // 原为:0000 1100,左移2位后:0011 0000 (48)
示例 5:右移
int result = a >> 2; // 原为:0000 1100,右移2位后:0000 0011 (3)
4. 应用示例
4.1 使用位运算实现开关
位运算可以用于高效地管理状态(开关):
#define FLAG_A 0x1 // 0001
#define FLAG_B 0x2 // 0010
#define FLAG_C 0x4 // 0100int flags = 0; // 初始状态// 设置FLAG_A
flags |= FLAG_A; // 0011// 检查FLAG_B
if (flags & FLAG_B) {// FLAG_B被设置
}// 清除FLAG_A
flags &= ~FLAG_A; // 0010
5. 总结
C语言中的二进制原理是计算机内数据表示和操作的核心。通过理解二进制的表示、运算和转换,程序员可以更高效地利用位运算来实现各种算法和数据处理任务。这对于底层编程、性能优化和硬件编程等领域尤其重要。掌握这些基本概念和运算方法,可以显著提高编程能力和程序性能。
相关文章:
学懂C语言(十二):C语言中的二进制原理及应用
目录 1. 二进制原理 1.1 什么是二进制? 1.2 如何在C语言中表示二进制? 2. 二进制的表示 2.1 二进制和其他进制的转换 2.2 C语言中的二进制表示 3. 二进制运算 3.1 位运算符 3.2 计算过程示例 4. 应用示例 4.1 使用位运算实现开关 5. 总结 C语…...
科研绘图系列:R语言雨云图(Raincloud plot)
介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…...
优化教学流程和架构:构建高效学习环境的关键步骤
在教育领域,设计和优化教学流程和架构是提高学习效果和学生参与度的关键。本文将探讨如何通过合理的教学流程和有效的架构来构建一个高效的学习环境。 ### 1. 理解教学流程和架构的重要性 教学流程指的是教学活动的组织和顺序,而教学架构则是指支持教学…...
js | this 指向问题
https://juejin.cn/post/6844904083707396109 任何函数运行的时候,都会创建一个context对象,context对象有一个this对象,在运行的时候决定。任何函数都对应一个reference类结构体(具体叫啥有点忘了),简单就…...
《昇思 25 天学习打卡营第 15 天 | 基于MindNLP+MusicGen生成自己的个性化音乐 》
《昇思 25 天学习打卡营第 15 天 | 基于MindNLPMusicGen生成自己的个性化音乐 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 MusicGen概述 MusicGen是由Meta AI的Jade Copet等人提出的一种基于单个语言模型&…...
Gitee 使用教程1-SSH 公钥设置
一、生成 SSH 公钥 1、打开终端(Windows PowerShell 或 Git Bash),通过命令 ssh-keygen 生成 SSH Key: ssh-keygen -t ed25519 -C "Gitee SSH Key" 随后摁三次回车键(Enter) 2、查看生成的 SSH…...
理解Cookie、Session和Token
在现代Web开发中,用户身份认证和会话管理是至关重要的部分。理解Cookie、Session和Token的区别和应用场景,有助于我们设计出更加安全和高效的Web应用。本文将详细探讨这三者的工作原理、优缺点以及使用场景。 1. Cookie 1.1 什么是Cookie? …...
概率论原理精解【1】
文章目录 测度概述集类笛卡尔积定义例子 多集合的笛卡尔积定义计算方法注意事项 有限笛卡尔积的性质1. 定义2. 性质2.1 基数性质2.2 空集性质2.3 不满足交换律2.4 不满足结合律2.5 对并和交运算满足分配律 3. 示例4. 结论 参考链接 测度 概述 所谓测度,通俗的讲就…...
数据结构(二叉树-1)
文章目录 一、树 1.1 树的概念与结构 1.2 树的相关术语 1.3 树的表示 二、二叉树 2.1 二叉树的概念与结构 2.2特殊的二叉树 满二叉树 完全二叉树 2.3 二叉树的存储结构 三、实现顺序结构二叉树 3.1 堆的概念与结构 3.2 堆的实现 Heap.h Heap.c 默认初始化堆 堆的销毁 堆的插入 …...
巴黎奥运会倒计时 一个非常不错的倒计时提醒
巴黎奥运会还有几天就要开幕了,大家应该到处都可以看到巴黎奥运会的倒计时,不管是电视上,还是网络里,一搜索奥运会,就会看到。倒计时其实是一个我们在生活中很常用的一个方法,用来做事情的提醒,…...
【Python】使用库 -- 详解
库就是别人已经写好了的代码,可以让我们直接拿来用。 一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在…...
Web3D:WebGL为什么在渲染性能上输给了WebGPU。
WebGL已经成为了web3D的标配,市面上有N多基于webGL的3D引擎,WebGPU作为挑战者,在渲染性能上确实改过webGL一头,由于起步较晚,想通过这个优势加持,赶上并超越webGL仍需时日。 贝格前端工场为大家分享一下这…...
SpringBoot面试高频总结01
1. 什么是SpringBoot? SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。 相比于传统的Spring框架,S…...
Linux 工作队列(Workqueue):概念与实现
目录 一、工作队列的概念1.1 什么是工作队列1.2 为什么使用工作队列 二、工作队列的实现2.1 定义和初始化工作队列2.2 工作队列API 三、工作队列的应用3.1 延迟执行任务3.2 处理复杂的中断任务 四、工作队列的类型4.1 普通工作队列4.2 高优先级工作队列 五、总结 在Linux内核中…...
前端页面是如何禁止被查看源码、被下载,被爬取,以及破解方法
文章目录 1.了解禁止查看,爬取原理1.1.JS代码,屏蔽屏蔽键盘和鼠标右键1.2.查看源码时,通过JS控制浏览器窗口变化2.百度文库是如何防止抓包2.1.HTPPS2.2. 动态加载为什么看不到?如何查看动态加载的内容?3.禁止复制,如果解决3.1.禁止复制原理3.2.如何破解1.了解禁止查看,爬…...
51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示 STC89C52RC 之HX1838红外解码NEC数码管串口打印LED显示1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单…...
在不同环境中,Java应用程序和MySQL等是如何与Docker进行交互和操作的?
1. 本地开发环境 在本地开发环境中,可以使用Docker Compose来管理和运行Java应用程序容器和MySQL容器。通常,会创建一个docker-compose.yml文件,定义需要的服务及其配置。 以下是一个示例docker-compose.yml文件: version: 3 services:app…...
《DRL》P10-P15-损失函数-优化(梯度下降和误差的反向传播)
文章目录 损失函数交叉熵损失多类别分类任务概述真实标签的独热编码交叉熵损失函数 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式均方误差平均绝对误差 优化梯度下降和误差的反向传播 简介 本文介绍了神经网络中的损失函数及其优化方法。损失函数用于衡量模型预测值与真实值…...
Spring Boot项目的404是如何发生的
问题 在日常开发中,假如我们访问一个Sping容器中并不存在的路径,通常会返回404的报错,具体原因是什么呢? 结论 错误的访问会调用两次DispatcherServlet:第一次调用无法找到对应路径时,会给Response设置一个…...
<数据集>手势识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:2400张 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注类别数:5 标注类别名称:[fist, no_gesture, like, ok, palm] 序号类别名称图片数框数1fist597…...
【Vue3】选项式 API
【Vue3】选项式 API 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。…...
2、如何发行自己的数字代币(truffle智能合约项目实战)
2、如何发行自己的数字代币(truffle智能合约项目实战) 1-Atom IDE插件安装2-truffle tutorialtoken3-tutorialtoken源码框架分析4-安装openzeppelin代币框架(代币发布成功) 1-Atom IDE插件安装 正式介绍基于web的智能合约开发 推…...
百日筑基第二十三天-23种设计模式-创建型总汇
百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…...
张量的基本使用
目录 1.张量的定义 2.张量的分类 3.张量的创建 3.1 根据已有数据创建张量 3.2 根据形状创建张量 3.3 创建指定类型的张量 1.张量的定义 张量(Tensor)是机器学习的基本构建模块,是以数字方式表示数据的形式。PyTorch就是将数据封装成张量…...
Oracle(14)什么是唯一键(Unique Key)?
唯一键(Unique Key)是数据库表中的一个或多个列,它们的值必须在整个表中唯一,但允许包含NULL值。唯一键的主要目的是确保表中每一行的数据在指定的列(或列组合)中是唯一的,以防止重复数据的出现…...
PostgreSQL的引号、数据类型转换和数据类型
一、单引号和双引号(重要): 1、在mysql没啥区别 2、在pgsql中,实际字符串用单引号,双引号相当于mysql的,用来包含关键字; -- 单引号,表示user_name的字符串实际值 insert into t_user(user_nam…...
Mad MAD Sum-Codeforces Round 960 (Div. 2)
题目在这里 大意: MAD函数返回出现次数 ≥ 2 \geq2 ≥2的最大整数 b i b_i bi M A D ( a [ 1 , 2 , . . . i ] ) MAD(a[1,2,...i]) MAD(a[1,2,...i]) 每次操作把 a i a_i ai进行上述操作,直到全变为0为止,对每次操作的数组进行求和,记…...
Flutter 插件之 package_info_plus
当使用Flutter开发应用时,通常需要获取应用程序的基本信息,例如包名、版本号和构建号。Flutter提供了一个名为 package_info_plus 的插件,它能方便地帮助我们获取这些信息。 1. 添加依赖 首先,需要在项目的 pubspec.yaml 文件中添加 package_info_plus 的依赖。打开 pubs…...
如何实现布隆过滤器?
1.布隆过滤器的场景 在Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」。 你会说我们只要记录了每个用户看过的历史记录,每次推荐的时候去查询数据库过滤存在的数据实现去重。 …...
运维团队如何高效监控容器化环境中的PID及其他关键指标
随着云计算和容器化技术的快速发展,越来越多的企业开始采用容器化技术来部署和管理应用程序。然而,容器化环境的复杂性和动态性给运维团队带来了前所未有的挑战。本文将从PID(进程标识符)监控入手,探讨运维团队如何高效…...
app分销商城系统/宁波seo排名优化培训
// 适配器 Adapter类中简要代码 Context mContext;//获取环境上下文 //设置领用日期holder.tvDate.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {Toast.makeText(mContext.getApplicationContext(), "预约时间无效,请…...
wordpress sns/网站seo搜索引擎优化教程
2019独角兽企业重金招聘Python工程师标准>>> 相对和绝对路径 绝对路径: 路径的写法一定由根目录“/”写起。例如 /usr/local/mysql 这就是绝对路径。 绝对路径不管在那个目录下都能进入访问! 相对路径: 路径的写法不是由根目录“/…...
平面设计有哪些网站/南宁网站seo外包
http://www.cnblogs.com/bakari/p/3562244.html perties类的操作 知识学而不用,就等于没用,到真正用到的时候还得重新再学。最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了&#x…...
网站前置审批专项/国际婚恋网站排名
环境: 电脑:联想E14 系统:Windows 10 专业版 64位 VMware 16.0 :Ubuntu20.04 问题描述: 如何更新国内源,原因是安装ssh没成功 解决方案: 1.备份原来的源 sudo cp /etc/apt/sources.list…...
汕头市住建局/seo外包软件
比较明显的网络流最小割模型,对于这种模型我们需要先求获利的和,然后减去代价即可。 我们对于第i个人来说, 如果选他,会耗费A[I]的代价,那么(source,i,a[i])代表选他之后的代价,如果不选他,我们…...
wordpress 首页登录/交换链接适合哪些网站
蜜罐的概念与价值蜜罐,是HoneyPot的中文译名。这是一种颇具神秘感的安全技术,既使对阅历丰富的安全专家来说。因为尽管很多年前蜜罐技术就已经出现,但是至今对其在安全领域的意义、价值、地位都未有一个公认的结论。蜜罐同时也是一种极具吸引…...