计算机系统基础知识——详解二进制正负数及补码设计
前言:关于二进制数的补码反码等各种码,上学时候只学会了死记硬背却还是一头雾水,不懂这样设计的意义。所以总是隔很多时间后还是记不住,今天就尝试用自己的理解解释下正负数以及补码的设计,如果有不对的地方或者有更好的解释,欢迎各位大佬指出。
1. 二进制中的“0”
对于二进制数据的解释,位数极其重要。比如:0x00
和0x100
在被当作两个字节数据读取是,分别是0
和256
;在只读取一个字节时,都被解释为0
。
2. 正负数满足的条件
现假设我们有8位二进制位表示十进制数,可表示的十进制数共有282^828种。
若我们用AAA表示其中一个二进制数,A′A'A′表示其中另外一个二进制数,并且AAA和A′A'A′是这个范围内完全不同的数,想要满足一个条件:A+A′=0A+A'=0A+A′=0。
只有一种情况可以满足,即0
其实为0x100
。AAA和A′A'A′相加后,满足了二进制加法进位,最高位溢出,对于机器平台定义的8位二进制数据来说,还是相当于0。
若想在282^828个数的范围中表示正负数,若AAA表示这个范围中的一个正数,A′A'A′表示这个数的相反数,则他们满足:
A+A′=0=sum,(sum = 0x100)A+A'=0=sum\text{,(sum = 0x100)} A+A′=0=sum,(sum = 0x100)
计算负数A′A'A′的表示为:A′=0−A=sum−AA'=0-A=sum-AA′=0−A=sum−A
3. 按位取反的数学意义
在上述例子中,对一个八位二进制数AAA按位取反得到A′′A''A′′,AAA和A′′A''A′′满足:A+A′′=0xFF=sum−1A+A''=\text{0xFF}=sum-1A+A′′=0xFF=sum−1,同时也有A=sum−1−A′′,A′′=sum−1−AA=sum-1-A'',A''=sum-1-AA=sum−1−A′′,A′′=sum−1−A
4. 补码的设计
对于一个8位二进制,对其计算采用8位范围内的数据范围,可得上述公式有:
A′=sum−AA′=sum−1−A+1=(sum−1−A)取反操作+1A=sum−A=(sum−1−A′)取反操作+1A'=sum-A \\ A'=sum-1-A+1=(sum-1-A)_{取反操作}+1 \\ A=sum-A=(sum-1-A')_{取反操作}+1 A′=sum−AA′=sum−1−A+1=(sum−1−A)取反操作+1A=sum−A=(sum−1−A′)取反操作+1
即补码的设计:
- 负数 = 正数取反 + 1
- 正数 = 负数取反 + 1
小结:若一个n位的二进制数,可表示2n2^n2n种数。若AAA是其中一个数,对AAA取反是求2n−1−A2^n-1-A2n−1−A。AAA的相反数是2n−A=2n−1−A+1=A取反+1=对A求补2^n-A=2^n-1-A+1=A \text{取反}+1= \text{对} A \text{求补}2n−A=2n−1−A+1=A取反+1=对A求补
计算机系统基础知识——详解二进制正负数及补码设计相关推荐
- 【BLE】OTA基础知识详解
[BLE]OTA基础知识详解 一. 概念 1. 缩写 BIM Boot Image Manager , the software bootloader CRC cyclic redundancy ch ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- R语言可视化绘图基础知识详解
R语言可视化绘图基础知识详解 图形参数:字体.坐标.颜色.标签等: 图像符号和线条: 文本属性: 图像尺寸及边界: 坐标轴.图例自定义等: 图像的组合: #install.packages(c(&qu ...
- 计算机网络相关知识 参考博客 子网掩码怎么理解 网关及网关的作用 路由器基础知识详解
子网掩码怎么理解 https://blog.csdn.net/farmwang/article/details/64132723 网关及网关的作用 https://blog.csdn.net/zhao ...
- RabbitMQ基础知识详解
RabbitMQ基础知识详解 2017年08月28日 20:42:57 dreamchasering 阅读数:41890 标签: RabbitMQ 什么是MQ? MQ全称为Message Queue, ...
- Android随机点名器,Excel基础知识-详解随机点名器
说道制作个案例纯粹意外,我多少有点选择恐惧症,为了不在"选择"上纠结,就自己小玩了一下,就用了程序做了个选择器,其实很简单,就是有小时候玩的"点兵点将",稍微变 ...
- Python基础知识详解 从入门到精通(八)魔法方法
目录 Python基础知识详解 从入门到精通(八)魔法方法 什么是魔法方法 基础魔法方法(较为常用) 比较操作符 算数运算符 反运算(类似于运算方法) 增量赋值运算 一元操作符 类型转换 上下文管理( ...
- 网络管理之基础知识详解
网络管理之基础知识详解 目录 3.1 网络的特征 3.2 拓扑结构 4.1 OSI简介 4.2 数据传输过程 4.3 分层作用 4.4 PDU 5.1 单播 5.2 多播 5.3 广播 5.4 三种通 ...
- 工业相机基础知识详解
工业相机基础知识详解 工业相机是机器视觉系统的一个最关键的组件.他的功能很简单,就是将被检测的物体拍摄下来,然后转换成电脑可以识别的图像,以便以后进行图像处理,从而完成检测任务.工业相机俗称工业摄像机 ...
最新文章
- onclick事件执行2次
- 一个Portal处理流程
- 移动时代的互联网格局变化
- pycharm 安装与激活
- php yield mysql_PHP 5.5 新特性关键字 yield
- 移动建模平台元数据存储架构演进
- 记一次奇怪的debug:Tomcat部署网站每一个页面第一次打开404刷新后才正常显示...
- Cocos2d-x 地图行走的实现3:A*算法
- 2W+汉字转拼音JS字库(UTF-8生僻字等通用无乱码)
- MD文件阅读工具及配置
- FOC电机控制之SVPWM原理与实现
- VMware 运行出现“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”解决方案
- 基于51单片机步进电机控制
- SCI论文的构思与常用结构
- Cheat Engine(CE)-----下载安装及入门
- 一文扫尽检测类评估指标:AP、mAP、ReCall、OKS和IoU
- Property visible must be accessed with $ or _ are not proxied in the Vue instance to prevent错误
- 怎么从H5广告页内复制微信号直接调起微信客户端添加好友
- python: npy数据写入excel文件
- hpm128无法共享打印_HP M128fn打印机共享后无法打印