计算机组成原理之源码、反码、补码详解及Byte结构
本文基础知识大部分来自于大学学习的 计算机组成原理,计算机科学技术导论等教材
引论
编程语言中,多数都会由byte类型,那byte类型是一个什么样的概念呢,占用字节数为1,为什么值范围是-128~127呢,带着这样的疑问我们进入话题
十进制数 97 和-97对应的二进制 1100001 和 -1100001
在数学中,是将正号“十”和负号“一”放在绝对值前面来表示该数是正数还是负数的。而在计算机中则使用符号位来表示正、负数。符号位规定放在数的最前面,并用“0”表示正数,用“1”表示负数。这样,数的符号也数码化了。在计算机中,负数有三种表示方法:原码、反码和补码。任何正数的原码、补码和反码的形式完全相同,而负数则有各种不同的表示形式。为区分起见,将原来用一般形式表示的数X称为机器数的真值,而将数在计算机内的各种编码表示称为机器数,根据表示方法的不同分别记为[X]原、[X]反和[X]补等
在由日常数据转换为计算机硬件能够直接识别、处理的机器数时,需要解决三个问题
1. 只能采用二进制数,每位数码非0即1;
2. 将符号位数字化,如用0表示正号,用1表示负号;
3. 采用什么编码方法表示数值。
一、原码、补码、反码
原码
原码表示法约定:让数码序列的最高位为符号位,符号位为0表示该数为正,为1表示该数为负;数码序列的其余部分为有效数值,用二进制数绝对值表示。
97对应的 原码:0 1100001 -97对应的原码:1 1100001
反码
正数的反码是其本身(等于原码);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0
97 的 原码和反码都是:0 1100001
-97 的原码:1 1100001
-97 的反码:1 0011110
补码
假设 我们用原码进行加减法操作,示例 十进制 -2 对应二进制 1 0000010,十进制 3 对应二进制 0 0000011,正数之间是不会有问题的,但负数相加就会出现一些问题
为了克服原码表示法在加、减运算中的缺点,引入了补码表示法,并以此作为加、减运算的基础。引入补码表示法的目的是:让符号位也作为数值的一部分直接参与运算,以简化加、减运算的规则,同时又能化减为加。下面举个例子说明补码的思想:
如 时钟。时钟以12为一个计数循环,在有模运算中称为“以12为模”。13点舍去模12后,就是1点。从0点位置出发,沿反时针方向将时针拨动-1格(即-1点),等同于沿顺时针方向拨动11格(即11点)。换句话说,在以12为模的前提下,-1可以映射为+11。由此我们得到启发:在有模运算中,一个负数可以用一个与它互为补码的正数来代替。
补码示例
注:数的原码表示形式简单,适合于进行乘除运算,但用原码表示的数进行加减运算比较复杂。引入补码以后,减法运算可以使用加法来实现,且数的符号位也可以当作运算值一样参加运算,因此在计算机中大都采用补码来进行加减运算。
二、Byte结构
在绝大多数语言中 Byte结构都是 1字节 范围 [-128,127]
这个参考上文讲的 机器数 是计算机里存储的,计算机可以识别的数,所以 Byte 1字节是8位,可以表示的范围是 0000 0000 ~ 1111 1111,注意此处存储的是 原数值的补码
正数部分:正数的补码还是自己,即 0000 0000 ~ 0111 1111 表示范围是 [0,127] ,
负数部分:负数的补码 是该数的原码除负号位外各位取反,然后在最后一位加1,
即 1111 1111 ~ 1000 0000 对应的原值 1 0000 0000 ~ 1000 0001 即为 [-128,-1]
注意:其实有的时候很难理解 把 1000 0000 转换为 -128,这个原因是 高位被截断,其实他的原码应该是 1 0000 0000 然后取补码得到 1000 0000
以下为Java代码示例
到此这篇关于计算机组成原理之源码、反码、补码详解及Byte结构的文章就介绍到这了,更多相关源码、反码、补码详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
相关文章
在电脑上如何看是否获取了IPv6的地址? 开启让设备获取到IPv6的教程
随着互联网的快速发展,IPv4地址资源日益紧张,IPv6作为下一代互联网协议,其重要性日益凸显,那么,如何开启IPv6以享受更广阔的网络空间呢?以下是几个关键步骤2024-10-11c盘占用很大却找不到占用的文件怎么清理? 电脑c盘快速瘦身的技巧
盘的空间突然悄然消失,而我们却找不到到底是哪些文件占据了如此巨大的空间,在这篇文章中,我们将为您揭秘C盘空间消失的真相,并分享一些快速找到大文件的方法2024-10-10CMD如何查询局域网内的IP地址? cmd查看局域网内所有设备ip的教程
在日常工作和生活中,我们经常需要查看本机的IP地址,IP地址是网络中标识设备的唯一地址,掌握查看IP地址的方法对于网络故障排查、远程连接等操作非常重要,怎么使用命令行2024-09-26远程桌面不能复制粘贴怎么解决? 远程桌面无法复制粘贴文件到本地教程
有时候远程会遇到往里面拷贝东西的时候,但怎么都无法拷贝进去,一直提示它的粘贴就失效,这样的情况如何去解决呢?下面我们就来看看详细的解决办法2024-09-24电脑开机没有找到启动设备怎么办? 开机时找不到启动设备多种解决办法
电脑屏幕显示“Windows找不到启动设备”错误消息,则意味着您的系统无法找到可启动设备来启动操作系统,下面我们就来看看详细的解决办法2024-09-24c盘windows文件夹太大了怎么清理? windows文件夹太大清理方法
Windows电脑使用久了会产生很多文件,有临时文件、缓存文件,也有一些工作上产生的资料文件,那么如何管理太大的文件夹呢?详细请看下文介绍2024-09-24NPU和GPU有什么区别? NPU与GPU的性能对决与应用解析
随着人工智能的发展,为了优化AI 和神经网络的运算效率,NPU和GPU经常被拿来做对比,今天我们就简要地探讨一下NPU和GPU,比较它们的差异,并研究各自的优点和缺点2024-09-13电脑主板上CPU供电8+4pin或者8+8Pin一定要插满吗?
目前主板上的CPU供电接口通常为单8pin供电,不过有些偏高端的型号会采用双8pin或者8+4pin接口,那么主板上CPU供电8+4pin或者8+8Pin一定要插满吗?不插满可以用吗?详细请看2024-09-09vcruntime140.dll丢失怎么办? vcruntime140.dll文件缺失的修复技巧
vcruntime140.dll无法继续执行代码是一个相对常见的错误,本文将详细解释这个错误的原因,并提供相应的解决方案2024-09-03amtlib.dll在哪? amtlib.dll文件丢失的多种修复方法
在 Windows 操作系统里,amtlib.dll 属于一个极其关键的动态链接库文件,主要应用于 Adobe 软件产品当中,像 Photoshop 以及 Illustrator 等等,下面我们就来看看amtlib.dl2024-09-03
最新评论