计算机中的数制与编码(二进制转换)

news2024/11/18 16:29:05

一、进制表示

1. 十进制表示

使用(0,1,2,…,9)十位数字表示,十进制运算时逢十进一。

2. 二进制表示

使用(0,1)两个数字表示,二进制运算时逢二进一。

3. 十六进制表示

使用数字和符号(0-9, A-F)表示,十六进制运算时逢十六进一。

对于任意进制数的表示N,我们把数字kN中的位置称为序号,用i表示(序号从右到左分别为0,1,2,…,小数部分的序号从左到右分别为-1,-2,-3,…),把能用来表示N的符号(数字)的个数称为基数,用X表示(例如二进制的基数是2,十进制的基数是10,十六进制的基数是16),把Xi次方称为第i位上的

二、各种数制的转换

1. 各种数制转换为十进制

各种进制转换为十进制,只要对应位上的数值乘以该位的权求和即可。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4525YHD-1689403623568)(./进制转换.png)]

其中m为小数的位数,n为整数的位数。

例一,将二进制1101.11转换为十进制

1101.11=1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 + 1*2-1 + 1*2-2=13.75

例二,将十六进制e5ad.bf转换为十进制

e5ad.bf=14*16^3 +5*16^2+10*16^1 + 13*16^0 + 11 * 16^-1 + 15*16^-2=58797.74

2. 十进制转换成二进制

将十进制数N转换为二进制数:

  • 用N除以2得到商j,余数y,取余数j0;
  • 如果j不是0,则继续用j除以2,取新的余数j1;
  • 重复上述步骤知道商为0,将余数从右到左排列即位对应的二进制数...j1j0

小数部分转换为,小数部分乘以基数(2)得到值B,B取整数(0或1)先为高位,后为低位,继续取B的小数部分乘以2得值取整,直到小数部分为0。

例如:0.75转换成二进制

0.75 * 2 = 1.5,取整数部分1为二进制高位,此时小数部分不为0,继续用(1.5-1)*2=1.0,取整数部分1,此时小数部分已经为0停止计算。得到结果0.75D=0.11B

3. 十进制转换成十六进制

十进制转换为十六进制算法同二进制算法,将基数改为16即可。

4. 二进制和十六进制之间的转换

因为2的4次方等于16,所以用四位二进制表示一个十六进制数。得到二进制和十六进制之间的转换方法如下:

  • 二进制转换为十六进制

    以小数点为分界,整数部分从右往左,每四位一组,不足四位时高位补0,;小数部分从左往右每四位一组,不足四位时低位补0。将四位二进制数换算成10进制数值显示,10-15用A-F表示即为十六进制。

  • 十六进制转换成二进制

    将每一位十六进制数写成对应的四位二进制数即可。

三、二进制数的逻辑运算

  1. “与”,只有当两个变量的结果都为1时,结果为1
  2. “或”,只要有一个变量的为1,结果为1
  3. “非”,非0为1,非1为0
  4. “异或”,只要两个变量不同,结果就为1

四、带符号数的表示和运算

在计算机中为了区分正数和负数,通常用二进制数的最高位表示数的符号。对于一个字节型的二进制中最高位为符号位,剩余7位为数值为,规定用"0"代表整数,"1"代表负数,数值位表示该数的数值大小。

通常,把一个数及其符号位在机器中的一组二进制表示形式称为机器数机器数所表示的值称为该机器数的真值

1. 机器数的表示方法

常用的机器数的表示方法有,原码表示法,反码表示法和补码表示法。目前计算机中通常使用补码进行带符号数的运算。

1.1 原码

原码表示

其中n为机器字长,x为数值。

例在8位字长的机器中

[+8]的原码=00001000 [-8]的原码=2^7 + 8=10001000

[+0]的原码=00000000 [-0]的原码=2^7 + 0=10000000

由于使用原码做数值的运算使处理器电路的设计相对复杂,所以计算机中通常使用补码做算数运算。

1.2 反码

反码表示

其中n为机器字长,x为数值。

整数的反码与原码相同,负数的反码在原码的基础上,符号位不变(仍为1),数值位按位取反。

例如在8位字长的机器中

[-0]的反码=(2^8 - 1) - 0 = 11111111 [-127]的反码=(2^8 - 127)=10000000

1.3 补码

补码表示

其中n为机器字长,x为数值。

正数的补码与原码、反码相同。负数的补码在原码的基础上符号位不变(为1),数值位按位取反,末位加1。

例如在8位字长机器中

[-8]的原码=10001000 [-127]的原码=11111111

[-8]的反码=11110111 [-127]的反码=10000000

[-8]的补码=2^8-8 = 11111000 [-127]的补码=2^8-127 = 10000001

可以看出来补码表示数的范围是-2^(n-1)~+2^(n-1)-1

2. 真值和机器数的转换
2.1 原码转换为真值

将原码的数值位按权展开求和,由符号位决定数的正负即可由原码求出真值。

例如求原码x=00011111和原码y=10011101的真值

x = + (0 * 2^6 + 0 * 2^5 + 1*2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2 ^0) = 31

x = - (0 * 2^6 + 0 * 2^5 + 1*2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2 ^0) = -29

2.2 反码转换为真值

先算出反码的原码,再由原码按照上述的方式运算即可求出反码的真值。

正数的原码等于反码本身,负数的原码在反码的基础上,符号不变(1),数值位按位取反。

例如求反码x=00001111和反码y=11100101的真值

x的原码=x的反码=00011111

x = + (0 * 2^6 + 0 * 2^5 + 0*2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2 ^0) = 15

y的原码=10011010

y = - (0 * 2^6 + 0 * 2^5 + 1*2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2 ^0) = -26

2.3 补码转换为真值

同理,要求补码的真值,先求出补码的原码,在按上述方法计算。

正数的原码和补码相同,负数的补码在补码的基础上再次求补码。

例如以知补码x=00001111和补码y=11100101,求x和y

x的原码=x的补码=00001111

x = + (0 * 2^6 + 0 * 2^5 + 0*2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2 ^0) = 15

y的原码=10011011

x = + (0 * 2^6 + 0 * 2^5 + 1*2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2 ^0) = -27

五、补码的加减运算

计算机中带符号数通常用补码表示,运算结果也自然是补码,其运算特点是符号位和数值位参与运算,并且自动获得结果(包括符号位和数值位)

两数补码的和等于两数和的补码

两个补码x1,x2的减法运算为x1的补码 + (-x2)的补码=[x1 - x2]的补码

计算机中带符号数用补码表示时有如下优点

  • 可以将减法运算变为加法运算,因此可以使用同一个运算器实现加法和减法运算,简化了电路。
  • 无符号数和带符号数的加法运算可以使用同一个加法器实现,结果都是正确的。

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

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

相关文章

AIGC文生图:stable-diffusion-webui部署及使用

1 stable-diffusion-webui介绍 Stable Diffusion Web UI 是一个基于 Stable Diffusion 的基础应用,利用 gradio 模块搭建出交互程序,可以在低代码 GUI 中立即访问 Stable Diffusion Stable Diffusion 是一个画像生成 AI,能够模拟和重建几乎…

宝塔面板清理

查看磁盘使用情况时发现/dev/sda1满了,重启服务器也不行,瞎折腾了半天,才发现是宝塔的回收站占了较大的磁盘,于是按以下操作清理了下,就可以了 1、清除系统监控记录。打开宝塔面板后台,找到监控&#xff0c…

模拟面试2

1.说一说ArrayList的实现原理? ArrayList底层基于数组实现,内部封装了Object类型的数组,实现了list接口,通过默认构造器创建容器时,该数组被初始化为一个空数组,首次添加数据时再将其初始化为容量为10的数组…

变量生命符thread_local

thread_local是c11为线程安全引进的变量声明符。 thread_local是一个存储器指定符: 所谓存储器指定符,其作用类似命名空间,指定了变量名的存储期以及链接方式。同类型的关键字还有: static:静态或者线程存储期&…

2.我的第一个 JAVA 程序Helloword

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它描述一类对象的行为和状态。…

前端videojs实现m3u8格式的直播

一、安装 npm install --save-dev video.js 二、引入 import videojs from "video.js"; import "video.js/dist/video-js.css"; 三、template 由于此处客户需要全屏至指定框大小,而不是全屏整个屏幕所以没用插件自带的全屏控件 隐藏自带全屏…

Unity 2DJoint 物理关节功能与总结

本文将以动图方式展示每个2D物理关节的效果,并解析部分重要参数的作用以及常见调配方式。 1.Distance Joint 2D(距离关节) 顾名思义是距离关节,以下为启用EnableCollision前后 关节使得两物体保持一定的距离,如果旋…

Apache (二十一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 二、安装 1. yum安装 2. 编译安装 三、 目录结构 1. yum安装 2. 编译安装 四、虚拟主机头配置 1. 基本配置 2. 实现方式 五、配置文件语法检查 六、 …

MySQL [环境配置]

MySQL [环境配置] MySQL的下载sqlyog的下载 熟悉老陈的人, 都清楚我不喜欢写这些环境配置的博客 那为啥这次要写一下MySQL的环境配置呢? 因为我被这一个小小的环境配置困扰了很长时间, 淋过雨的人都想为别人撑一把伞, 我不希望我的铁汁们也被这个问题困扰 MySQL的下载 MySQL下…

3. 测试 - 软件测试生命周期 BUG 的级别和生命周期

目录 1. 软件测试的生命周期 2. 描述 BUG 2.1 为什么要进行描述 2.2 如何描述一个 BUG 练习描述 BUG:邮箱登录不上去 练习描述 BUG:ie下界面显示异常,界面文字有重叠 3. BUG 的级别 4. BUG 的生命周期 1. 软件测试的生命周期 软件的…

【kubernetes系列】Kubernetes之Ingress

概述 从前面的学习,我们可以了解到Kubernetes暴露服务的方式目前常见的只有三种:LoadBlancer Service、NodePort Service、Ingress;而我们需要将集群内服务提供外界访问就会面临以下几个问题: Pod 漂移问题 Kubernetes 具有强大…

ubuntu 不能检测到显卡信息

开始时:lspci | grep -i nvidia 01:00.0 VGA compatible controller: NVIDIA Corporation Device 2489 (rev a1) 01:00.1 Audio device: NVIDIA Corporation Device 228b (rev a1) 运行sudo update-pciids 运行 lspci | grep -i nvidia 找到显卡了

Linux - 进阶 NFS服务器搭建 详解实验操作

建立 NFS 服务器,使用客户端成功访问 # 搭建环境 server 为服务端, node1 为客户端 ( 客户端是通过 服务端克隆出来的机子,并改了 IP 和 主机名) IP 都显示出,并且双方能够 Ping 通 这样准备环…

顶尖公司是平均水平的100倍,惊讶吗?

行业顶尖公司人员平均能力水平,在行业平均水平的100倍之上! 程序员的超级榜样:美国integram公司13个人,最后被facebook用10亿美金收购 《中庸》人能一之己百之,人能十之己千之 趣讲大白话:百倍努力&#xf…

项目管理软件挑选诀窍:6个必须知道的关键点!

项目管理软件对于任何希望简化其操作和提高效率的组织来说都是一个有价值的工具。然而,市场上有这么多的选择,选择合适的软件可能是一项艰巨的任务。在本文中,我们将讨论如何选择满足您业务需求的项目管理软件。 1、确定你的挑战和限制 选择项…

TL5000可调谐激光器控制软件系统

画了两周时间,利用下班时间,设计了一个ITLA可调谐激光器控制系统,从硬件到软件。 这是使用的界面,实现了下面的功能: 1、模块信息的读取,包括生产日期,生产厂家,型号,序…

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法 原因:下载的安装包为ISO文件,若没有解压缩,直接点击打开安装,则会出现这样的错误提示。 解决办法: 把安装包解压缩之后再进行安装。 安装教程可参考以下步骤: 前提条件: T…

【iOS内存管理-编译链接的过程】

文章目录 前言计算机语言文件后缀名 编译和链接的过程编译链接预处理(预编译)-> 产生.i文件编译 -> 产生.s文件汇编 -> 产生.o文件链接 总结 前言 就我而言,iOS开发的过程中接触到的编译链接方面的知识很少,这部分知识还…

【JavaSE】- 包装类和String常用方法

包装类和常用方法 1.1 包装类1.2 自动装箱和自动拆箱1.3 包装类型转String类型2.1 String2.2 String常用方法3.1 StringBuffer4.1 StringBuilder 1.1 包装类 1.2 自动装箱和自动拆箱 // 手动装箱int n1 100;Integer integer new Integer(n1);// 手动拆箱Integer integer02 I…

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具(Post Tools),在设置了 globalShortcut 快捷键后,发现应用中的快捷键与系统全局快捷键冲突了,导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…