关于二进制

news2024/11/18 4:26:37

关于二进制

读《程序是怎样跑起来的》

用二进制表示计算机信息的原因

 计算机内部是由IC(集成电路)这种电子部件构成的。CPU和内存也是IC的一种,IC有几种不同的形状,有的像一条黑色的蜈蚣,在其两侧有数个乃至数百个引脚;有的则像插花用的针盘,引脚在IC内部并排排列着。IC的所有引脚,只有直流电压0V和+5V两个状态。也就是说,IC的一个引脚,只能表示两个状态。

 IC的这种特性,决定了计算机的信息数据只能用二进制树来处理。由于1位(引脚)只能表示两个状态,所以二进制的计数方式就变成了0、1、10、11、100……这种形式。虽然二进制树并不是专门为IC而设计的,但是和IC的特性非常吻合。计算机处理信息的最小单位 —位,就相当于二进制中的一位。位的英文是bit。

 二进制的位数一般是8位、16位、32位……也就是8的倍数,这是因为计算机所处理的信息的基本单位是8位二进制数。8位二进制数被称为一个字节。字节是最基本的信息计量单位。位是最小单位,字节是基本单位。

 用字节单位处理数据时,如果数字小于存储数据的字节数(=二进制数的位数),那么高位上就用0填补。例如,100111这个6位二进制数,用8位(=1字节)表示时为00100111,用16位(=2字节)表示时为0000000000100111。奔腾等32位微处理器,具有32个引脚以用于信息的输入和输出。也就是说,奔腾一次可以处理32位(32位=4字节)的二进制数据信息。

 程序中,即使是用十进制数和文字等记录信息,在编译后也会转换成二进制数的值,所以程序运行时计算机内部处理的也是用二进制数表示的信息。

什么是二进制

 二进制的值转十进制的值,是将二进制数的各数位的值和位权相乘,然后将相乘的结果相加。

例如:

00100111(二进制数)

各位数的值和位权相乘,即:

( 0 ∗ 2 7 ) + ( 0 ∗ 2 6 ) + ( 0 ∗ 2 5 ) + ( 0 ∗ 2 4 ) + ( 0 ∗ 2 3 ) + ( 0 ∗ 2 2 ) + ( 0 ∗ 2 1 ) + ( 0 ∗ 2 0 ) (0*2^7)+(0*2^6)+(0*2^5)+(0*2^4)+(0*2^3)+(0*2^2)+(0*2^1)+(0*2^0) (027)+(026)+(025)+(024)+(023)+(022)+(021)+(020)
结果等于:

39(十进制)

十进制转二进制:

v2-8a76f66b03a3d63176194f2cb4f96ca2_r

位权的概念

 例如:十进制的39的各个数位的数值,并不是简单的3和9。3表示的是3x10=30,9表示的是9x1=9。这里和各个数位的数值相乘的10和1就是位权。同样,也适用于二进制数,即第1位是2的0次幂(=1),第2位是2的1次幂(=2),第3位是2的2次幂(=4),……这里的2是位权。

基数的概念

 接上,十进制中,3x10中10是基数,二进制中2是基数。

移位运算和乘除运算的关系

移位运算是指将二进制数值的各位数位进行左右移位的运算,移位有左移(像高位方向)和右移(像低位方向)两种。

a=39;
b=a << 2;

例如,上面将a保存的十进制39左移两位后再将运算结果存储到变量b的C语言程序中。<<表示左移,>>表示右移。

由于移位运算是针对二进制数值的位操作,十进制39的移位,需要先将十进制的39转成二进制,然后在进行移位操作。左移两位后,右边空出来的低位要进行补0操作。注意,这个只适用于左移运算。具体流程如下:

左移两位运算

形象地说,移位运算就好比使用二进制表示的图片模式像霓虹灯一样左右流动的样子。

不过,移位运算也可以通过数位移动来代替乘法运算和除法运算,十进制数左移后会变成原来的10倍、100倍、1000倍……同样,二进制数左移后就会变成原来的2倍、4倍、8倍……反之,二进制数右移则会变成原来的1/2、1/4、1/8……。

关于补数

二进制中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位称为符号位。符号位是0时表示正数,符号位是1时表示负数。

那么-1用8位二进制数来表示的话是什么呢?可能很多人认为“1的二进制数00000001,因此-1就是10000001“,但这个答案是错误的,正确答案是11111111。

为什么这样呢?是因为计算机在做减法运算时,实际上内部时在做加法运算。用加法运算来现实减法运算,为此,在表示负数时就需要使用”二进制的补数“。补数就是用正数来表示负数。

为了获得补数,我们需要先将二进制数的各数位的数值全部取取反,然后再将结果加1。例如用8位的二进制表示-1时,只需求的1,也就是00000001的补数即11111110,然后+1得到1111111,即为十进制-1的值。

图示如下:

补数的获取

逻辑右移与算术右移

了解了补数,现在回到右移这个话题,右移不像左移(左移只需要在低位补0),右移移位后高位有补0和补1两种情况。当二进制数的值表示图形模式而非数值时,移位后需要在最高位补0。类似于霓虹灯往右滚动的效果。这种情况称为逻辑右移

将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1)。这就称为算术右移。如果数值是用补数表示的负数值,那么右移后在空出来的最高位补1,就可以正确地实现1/2、1/4、1/8等数值运算。如果是正数,只需要在最高位补0即可。

例如,将-4(=11111100)右移两位。这时,逻辑右移的情况下结果就会变成00111111,也就是十进制数63,显然不是-4的1/4。而算术右移的情况下,结果就会变成11111111,用补数表示就是-1,即-4的1/4。

逻辑右移与算术右移

用二进制表示小数

由于计算机内部所有的信息都是以二进制数的形式来处理的,因此在这一点上,整数和小数并无差别。不过,使用二进制数来表示整数和小数的方法却有很大不同。

例如,把1011.0011这个有小数点的二进制数转换成十进制数,如下:

二进制数小数转换成十进制数的方法

二进制数和十六进制数

在以位为单位表示数据时,使用二进制数很方便,但如果位数太多,看起来就比较麻烦。因此,在实际程序中,也经常会用十六进制数来代替二进制数。在C语言程序中,只需要在数值的开头加上0x就可以表示十六进制。

二进制的4位,正好相当于十六进制数的1位。例如,32位二进制数00111101110011001100110011001101用十六进制数来表示的话,就是3DCCCCCD这个8位数。

用十六进制数来表示二进制小数时,小数点后的二进制数的4位也同样相当于十六进制数的1位。不够4位时用0填补二进制数的低位即可。例如,1011.011的低位补0后为1011.0110,这时就可以表示为十六进制数B.6。

十六进制数的小数点后第1位的位权是16的-1次幂即1/16=0.0635。

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

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

相关文章

智慧水务:数字孪生污水处理厂,3D可视化一键管控

近年来&#xff0c;智慧水务、数字水务成为水务行业的热点领域。对于污水处理领域&#xff0c;如何贯彻落实双碳战略&#xff0c;积极推进智慧水厂建设&#xff0c;显得尤为关键。 可视化技术结合视频融合、BIM、5G、物联网、云计算及大数据等先进技术&#xff0c;围绕水质达标…

用DIV+CSS技术制作个人博客网站(web前端网页制作课期末作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Docker】搭建MySQL主从复制,详细的图文展示

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build&#xff0c;Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应用等等&#xff09;及其运…

[附源码]JAVA毕业设计计算机散件报价系统(系统+LW)

[附源码]JAVA毕业设计计算机散件报价系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

技巧 | Python绘制2022年卡塔尔世界杯决赛圈预测图

文章目录&#x1f3f3;️‍&#x1f308; 1. 世界杯三十二强&#x1f3f3;️‍&#x1f308; 2. 世界杯十六强&#x1f3f3;️‍&#x1f308; 3. 世界杯八强&#x1f3f3;️‍&#x1f308; 4. 世界杯四强&#x1f3f3;️‍&#x1f308; 5. 决赛圈&#x1f3f3;️‍&#x1f…

技术内幕 | 阿里云EMR StarRocks 极速数据湖分析

作者&#xff1a;阿里云智能技术专家 周康&#xff0c;StarRocks Active Contributor 郑志铨&#xff08;本文为作者在 StarRocks Summit Asia 2022 上的分享&#xff09; 为了能够满足更多用户对于极速分析数据的需求&#xff0c;同时让 StarRocks 强大的分析能力应用在更加广…

【温故而知新】构建高可用Linux服务器(三)

时间&#xff1a;2022年12月02日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 前言 大家好&#xff0c;欢迎来到小蒋聊技术。小蒋准备和大家一起聊聊技术的那些事。 今天小蒋继续坚持“温故而知新”的落地实践&#xff0c;继续…

[附源码]计算机毕业设计影院管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【单片机基础】C51语言基础

文章目录1、使用C/C开发单片机的优点2、C51中的基本数据类型3、C51数据类型扩展定义4、C51中的运算符与基础语句5、二进制与十六进制转换1、使用C/C开发单片机的优点 C/C语言作为一种非常方便的语言得到了广泛的支持&#xff0c;如STC、STM32、arduino、乐鑫科技的单片机都支持…

【目标搜索】基于matlab运动编码粒子群算法优化 (MPSO) 无人机搜索丢失目标【含Matlab源码 2254期】

⛄一、运动编码粒子群算法简介 1 粒子群算法 PSO算法是一种基于群体智能的随机优化方法。在PSO中&#xff0c;粒子群模拟鸟群行为在搜索空间中探索&#xff08;全局搜索&#xff09;和开发&#xff08;局部搜索&#xff09;&#xff0c;最终找到全局最优解。粒子的速度和位置更…

网络安全观察报告 攻击态势

设备类漏洞从未缓解 从图 5.1 中可以看到&#xff0c;针对设备漏洞的攻击占全部利用漏洞攻击的 43%&#xff0c;这和近两年智能路由器等 联网设备大规模增长密切相关。正如绿盟科技在《2017 年物联网报告》1 中提到的那样&#xff0c;很多智能设备 在设计之初&#xff0c;安全…

第3章 Thymeleaf模板渲染

文章目录第3章 Thymeleaf模板渲染3.2 Thymeleaf编程起步3.4 读取资源文件3.5 路径处理3.6 内置对象操作支持3.7 对象输出3.8 页面逻辑处理3.9 数据迭代处理3.10 包含指令3.11 Thymeleaf数据处理3.12 本章小结3.12 本章小结第3章 Thymeleaf模板渲染 3.2 Thymelea…

【OpenCV-Python】教程:3-13 Hough直线变换

OpenCV Python Hough直线变换 【目标】 理解Hough变换的概念学会使用Hough变换检测直线cv2.HoughLines(), cv2.HoughLinesP() 【理论】 Hough 变换是一个非常有用的技术&#xff0c;可以检测任何形状&#xff0c;只要那个形状可以通过数学方程表示出来&#xff0c;即使检测…

[附源码]计算机毕业设计springboot小区疫情事件处理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

传感器_三相-双极性-开关型-霍尔传感器 速度+电角度解算理解

1 前言 最近项目上涉及到使用三相-双极性-开关型-霍尔传感器解算 电机转速 、电角度的问题。结合自己的理解请教前辈&#xff0c;终有所得&#xff0c;下面做一个学习的记录。 主要以思路为主&#xff0c;不涉及代码。 2 正文 2.1 什么是三相&#xff1f; 所谓三相-双极性-…

毕设项目 - SSM农业商品信息管理权限后台子系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的农业商品…

(算法设计与分析)第四章贪心算法-第一节:贪心算法概述

文章目录一&#xff1a;贪心算法&#xff08;1&#xff09;概述&#xff08;2&#xff09;特点&#xff08;3&#xff09;框架二&#xff1a;典型贪心算法问题&#xff08;1&#xff09;无重叠区间①&#xff1a;题目描述②&#xff1a;解题思路③&#xff1a;完整代码&#xf…

【Android App】人脸识别中扫描识别二维码实战解析(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、扫描识别二维码 不仅可以利用zxing库生成二维码&#xff0c;同样利用zxing库可以扫描二维码并解析得到原始文本&#xff0c;此时除了给build.gradle添加如下一行依赖配置 implementation com.google.zxing:core:3.4.1 还需要…

一文读懂什么是云原生|推荐收藏

Forrester数据显示&#xff0c;在2021年&#xff0c;全球云原生应用持续上升&#xff0c;组织中容器和无服务器技术的使用率在一年内都增长了75%以上。 Gartner预测&#xff0c;到2025年&#xff0c;将会有超过95%的新数字工作负载被部署在云原生平台上。 “未来的软件一定是长…

Qt第二十六章:QWidget、QMainWindow自定义标题栏

工具类&#xff08;读者直接复制到项目中&#xff09; class QCustomTitleBar:def __init__(self, window: QtWidgets):self.window window# 默认标题栏高度 必须设self.DEFAULT_TITILE_BAR_HEIGHT 40# 存储父类的双击事件self.mouseDoubleClickEvent_parent self.window.mo…