源码、反码、补码详解

本文基础知识大部分来自于大学学习的 计算机组成原理,计算机科学技术导论等教材

引论

编程语言中,多数都会由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 对应的原值 0000 0000 ~ 1000 0001  即为 [-128,-1]

注意:其实有的时候很难理解 把 1000 0000 转换为 -128,这个原因是 高位被截断,其实他的原码应该是 1 0000 0000 然后取补码得到 1000 0000

 以下为Java代码示例

源码、反码、补码详解

到此这篇关于计算机组成原理之源码、反码、补码详解及Byte结构的文章就介绍到这了,更多相关源码、反码、补码详解内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/172243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点的头像简单一点
上一篇 2024-11-22 04:08
下一篇 2024-11-22 04:08

相关推荐

  • 云智直聘 源码分析

    本文将会对云智直聘的源码进行分析,包括前端页面和后端代码,帮助读者了解其架构、技术实现以及对一些常见的问题进行解决。通过本文的阅读,读者将会了解到云智直聘的特点、优势以及不足之处,…

    编程 2025-04-29
  • 二进制补码转化为十进制原码

    二进制补码与原码转化是数字计算中必不可少的环节。本文将从多个方面对二进制补码转化为十进制原码进行详细阐述。 一、计算方法 计算二进制补码转化为十进制原码,我们需要先将二进制补码转化…

    编程 2025-04-29
  • Python网站源码解析

    本文将从多个方面对Python网站源码进行详细解析,包括搭建网站、数据处理、安全性等内容。 一、搭建网站 Python是一种高级编程语言,适用于多种领域。它也可以用于搭建网站。最常…

    编程 2025-04-28
  • 源码是什么

    源码是一段计算机程序的原始代码,它是程序员所编写的可读性高、理解性强的文本。在计算机中,源码是指编写的程序代码,这些代码按照一定规则排列,被计算机识别并执行。 一、源码的组成 源码…

    编程 2025-04-27
  • Go源码阅读

    Go语言是Google推出的一门静态类型、编译型、并发型、语法简单的编程语言。它因具有简洁高效,内置GC等优秀特性,被越来越多的开发者所钟爱。在这篇文章中,我们将介绍如何从多个方面…

    编程 2025-04-27
  • Python怎么看源码

    本文将从以下几个方面详细介绍Python如何看源码,帮助读者更好地了解Python。 一、查看Python版本 在查看Python源码之前,首先需要确认Python版本。可以在命令…

    编程 2025-04-27
  • 源码审计面试题用法介绍

    在进行源码审计面试时,可能会遇到各种类型的问题,本文将以实例为基础,从多个方面对源码审计面试题进行详细阐述。 一、SQL注入 SQL注入是常见的一种攻击方式,攻击者通过在输入的参数…

    编程 2025-04-27
  • 原码、反码、补码的转换

    一、什么是原码、反码和补码 在计算机中,二进制是运算的基础,而原码、反码和补码则是二进制运算中的概念。原码是一种基础的表示方法,它的最高位为符号位,其他位表示数值。反码则是在原码基…

    编程 2025-04-24
  • 对3ue源码的多方面阐述

    一、3ue源码简述 3ue是一款基于Vue.js开发的富文本编辑器,支持图片上传、粘贴、表格、代码块等多种功能,具有轻量、可定制、易扩展的特点。下面我们将从多个方面对3ue源码进行…

    编程 2025-04-22
  • 全面解析ptable:从使用到源码分析

    ptable是一个轻量级的DOM操作插件,主要用于表格的操作和功能增强。它的使用非常灵活,支持多种操作方式,包括添加、删除、修改、排序、筛选等,可以大大提高表格的效率和易用性。 一…

    编程 2025-04-22

发表回复

登录后才能评论