首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们在计算校验和时使用1的补码而不是2的补码

在计算校验和时,我们使用1的补码而不是2的补码的原因是:

  1. 补码的定义:补码是一种表示负数的二进制数表示方法。对于一个有符号的二进制数,其补码等于其反码加1。使用补码可以简化负数的运算。
  2. 补码的优势:使用1的补码可以统一处理正数和负数的加法运算,无需特殊处理符号位。同时,补码的加法运算可以通过忽略最高位的进位来实现,简化了运算过程。
  3. 计算校验和的目的:计算校验和是为了验证数据在传输过程中是否发生了错误或损坏。校验和是通过对数据进行求和运算得到的一个值,接收方可以通过计算校验和并与发送方提供的校验和进行比较,以判断数据是否完整和正确。
  4. 补码在计算校验和中的应用:在计算校验和时,我们将数据按照一定的规则进行分组,并对每个分组的数据进行求和运算。由于校验和是一个固定长度的值,因此在求和运算中可能会产生进位。使用1的补码可以简化进位的处理,使得计算校验和的过程更加高效和简单。

综上所述,我们在计算校验和时使用1的补码而不是2的补码,是因为1的补码可以统一处理正数和负数的加法运算,并且简化了进位的处理,使得计算校验和的过程更加高效和简单。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

计算机组成原理》| 第六章 计算运算方法-运算器 知识梳理

,掌握常用进制之间转换; 2、理解真值与机器数概念,了解BCD码概念; 3、掌握海明码循环冗余校验计算; 4、掌握定点数各种表示方法,包括无符号数表示;有符号数原码、       反码...定点数只能表示纯小数(小于一)纯整数(大于一)两种 浮点数则无限制 141516  原码反码补码 1.4、原码表示方法 一个n+1位整数,原码能表示数值范围是:              (...校验方法: 发送用奇校验,接受也应该是奇校验,发送是偶校验,接收也应该是偶校验 并非100% 2.1、补码定点加、减运算(一定会考) 1补码加法 [ X+Y ]补= [ X ]补+ [ Y ]补 2...计算机只能判断溢出,不能处理溢出 溢出判断方法: 双符号位判溢出: 00 11不溢出,01正一,10负一 机器--双进位判断 在补码定点加法运算中,若采用1位符号位,则当(   ),表示结果溢出...浮点数:移码运算 移码:补码符号位取反 浮点数阶码为什么用移码表示  有利于机器数比大小!

81420

计算机组成原理 --- 数据信息表示

2.1 数据表示应考虑因素 1.数据类型 从大体上分类:数值数据非数值数据。 2.数据表示范围精确度 计算机所能表示范围精确度与所采用数据类型字长有关。...1,阶码偏移值 才是 127 不是 128....3.如果需要显示 打印汉字,还要将 汉字内码 转换成 字形码。 编码方式 无外乎 以下 4 大类。 ? 二:汉字机内码 汉字机内码 是 计算机内 存储处理汉字使用编码。...确定与使用数据校验,应该考虑不过多增加硬件开销情况下,尽可能发现或改正更多错误。常用数据校验码有 奇偶校验码 , 海明校验码 , 循环冗余校验码 。...2.4.4 循环冗余校验(CRC) 循环冗余校验是一种基于模2运算建立编码校验码 。 CRC 磁存储器 计算机通信方面应用较多。

1.9K10

原码,反码,补码深入理解与原理答案_原码反码补码例题详解

OK,补码就讲完了。再见!! 还是莫名其妙有没有,为什么补码等于反码加1为什么自低位向高位取反……………….? 其实上面那两段话,都只是补码求法,不是补码定义。...它存在,告诉我们忘记那句该死‘反码+1’它并不是必须。 如果你有兴趣了解,补码严格说法,我建议你可以看一下《计算机组成原理》。它会用‘模’‘同余’概念,严谨地解释补码。...而且我们可以通过下面的例子,也许能回答另一个问题,为什么负数符号位是‘1’,不是正数符号位是‘1’。...如果我们把1110(14)最高位看作符号位后就是(-2补码,这可能也是为什么负数符号位是‘1不是‘0’, 而且在有符号位四位二进制数中,能表示只有‘-8~7’,而无符号位数(14)作用有符号数...(七)为何这样求补码 然后我们再来看看为什么负数补码求法为什么是反码+1 因为负数反码加上这个负数绝对值正好等于1111,再加1,就是1000,也就是四位二进数负数补码是它绝对值同余数

70410

软件设计师考试 | 计算机系统

原码、反码、补码、移码 计算机中,数值是以机器数形式来表示,特点是采用了二进制计数法,数符号用 0 1 表示,小数点则银行,表示不占位置,机器数所对应实际数值就叫做数真值。...如果一个数是正数,那么它补码与原码反码一样。如果一个数为负数,则补码为反码末位加 1。此时 0 有惟一编码表示。...浮点数 当机器字长为 n ,定点数补码移码可以表示为 2^n 个数,而其原码反码只能表示 2^n - 1 个数(0 表示占了两个编码)。因此定点数能表示数值范围较小,运算很容易越界溢出。...其中 n 是 CRC 码字长,所以又叫 (n, k) 码。校验码由信息码产生,校验码位数越多,代码校验能力越强。求 CRC 编码,才用是模 2 运算。...模 2 加减运算规则是按位运算,不发生借位进位。要注意,当码距为 2 ,CRC 只能检错不能纠错。

74550

漫谈计算机组成原理(九)定点数及定点数运算

计算机中,小数点并没有用专门器件去表示,而是按照一种约定方式,统一存储寄存器单元中。算数逻辑运算单元(ALU)是CPU组成部分,负责算数逻辑运算。那么,ALU究竟是如何工作呢?...在上一讲我们说道,不论是整数还是小数,都是有小数点。整数小数点表示最后一位数字后面,小数小数点标识真值符号位后面。如图所示: ?...,但是这并非我们最终结果,最终结果应该丢掉第一个1,即1,0010.为什么呢?...这涉及到一个模2运算问题,如果不想深究只需要记住,一个数只能有一个符号位不是吗?...补码乘法:补码一位乘与原码一位乘类似,区别在于,当乘数为正时,补码乘法运算方法与原码一位乘运算方式相同;当乘数为负数补码一位乘前半部分同样原码一位乘相同,不同之处是在运算完成后,需要把最终结果加上

3.7K30

校验计算原理_CRC校验原理及代码

应该按如下步骤: 1、把校验字段设置为0; 2、把需要校验数据看成以16位为单位数字组成,依次进行二进制反码求和; 3、把得到结果存入校验字段中 接收数据计算数据包检验相对简单...另外UDP、TCP数据报长度可以为奇数字节,所以计算校验需要在最后增加填充字节0(填充字节只是为了计算校验,可以不被传送)。...并行计算 有些机器字处理长度是16倍数,这样可以提高他计算速度,由于可结合行,那么32位机器可以[A,B,C,D]+’…进行32校验为什么使用二进制反码循环移位加法呢?...我们知道,计算机中有原码,反码,补码为什么使用二进制反码来计算校验呢,不是直接使用原码或者是补码呢? 二进制反码循环移位加法求和优点 不依赖系统是大端小端。...这个问题你可以自己举个例子,用反码求和,交换16位数字节顺序,得到结果相同,只是字节顺序相应地也交换了;如果使用原码或者补码求和,得到结果可能就不同。

1.9K30

计算原码, 反码, 补码你了解吗?

原码, 反码, 补码基础概念计算方法. 探求为何机器要使用补码之前, 让我们先了解原码, 反码补码概念.对于一个数, 计算机要使用一定编码方式进行存储....通常也需要转换成原码计算其数值. 三. 为何要使用原码, 反码补码 开始深入学习前, 我学习建议是先"死记硬背"上面的原码, 反码补码表示方式以及计算方法....而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码, 实际上是这个数对于一个膜同余数. 而这个膜并不是我们二进制, 而是所能表示最大值!...这就和钟表一样, 转了一圈后总能找到可表示范围内一个正确数值! 2+126很显然相当于钟表转过了一轮, 因为符号位是参与计算, 正好溢出最高位形成正确运算结果....既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

95851

数字逻辑基础:原码、反码、补码

计算正数使用原码可以正常运算,但如果出现负数或减法运算,则会出错。 因此,原码计算,有着一套额外规则。 原码加法规则: 判断被加数和加数符号是同号还是异号。...通常也需要转换成原码计算其数值。 为什么要有三种码 首先,因为人脑可以知道第一位是符号位,计算时候我们会根据符号位,选择对真值区域加减 (真值概念在本文最开头)。...而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码,实际上是这个数对于一个膜同余数。而这个膜并不是我们二进制,而是所能表示最大值。...这就和钟表一样,转了一圈后总能找到可表示范围内一个正确数值。 2+126很显然相当于钟表转过了一轮,因为符号位是参与计算,正好溢出最高位形成正确运算结果。...既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

56800

数字逻辑基础:原码、反码、补码

计算正数使用原码可以正常运算,但如果出现负数或减法运算,则会出错。 因此,原码计算,有着一套额外规则。 原码加法规则: 判断被加数和加数符号是同号还是异号。...通常也需要转换成原码计算其数值。 为什么要有三种码 首先,因为人脑可以知道第一位是符号位,计算时候我们会根据符号位,选择对真值区域加减 (真值概念在本文最开头)。...而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码,实际上是这个数对于一个膜同余数。而这个膜并不是我们二进制,而是所能表示最大值。...这就和钟表一样,转了一圈后总能找到可表示范围内一个正确数值。 2+126很显然相当于钟表转过了一轮,因为符号位是参与计算,正好溢出最高位形成正确运算结果。...既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

65820

数据在内存中存储方式--C语言版

事实上,计算机中存储整型方式存在三种,分别是原码 反码 补码 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。...反码 将原码符号位不变,其他位依次按位取反就可以得到了。 补码 将反码加1即可得到 那么为什么计算机还要再负数上区分出原码反码补码转化关系呢?...为什么对于整形来说:数据存放内存中其实存放补码为什么不直接使用原码存储,这样岂不是更加方便?...//00000000000000000000000000000000 --相加后结果为0 return 0; } 通过上面的正反对比就可以知道为什么在内存中存储补码 计算机系统中,...原因在于,使用补码,可以将符号位和数值域 统一处理; 同时,加法减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程 是相同,不需要额外硬件电路。

54930

软考 | 计算机系统

原码、反码、补码、移码 计算机中,数值是以机器数形式来表示,特点是采用了二进制计数法,数符号用 0 1 表示,小数点则银行,表示不占位置,机器数所对应实际数值就叫做数真值。...如果一个数是正数,那么它补码与原码反码一样。如果一个数为负数,则补码为反码末位加 1。此时 0 有惟一编码表示。...浮点数 当机器字长为 n ,定点数补码移码可以表示为 2^n 个数,而其原码反码只能表示 2^n - 1 个数(0 表示占了两个编码)。因此定点数能表示数值范围较小,运算很容易越界溢出。...其中 n 是 CRC 码字长,所以又叫 (n, k) 码。校验码由信息码产生,校验码位数越多,代码校验能力越强。求 CRC 编码,才用是模 2 运算。...模 2 加减运算规则是按位运算,不发生借位进位。要注意,当码距为 2 ,CRC 只能检错不能纠错。

1.6K50

为什么计算机中负数要用补码表示?

今天我们就围绕这些问题展开。 ---- 思维导图: ---- 1. 为什么计算机要使用二进制数制? 所谓数制其实就是一种 “计数进位方式”。...计数过程中,当某一位满 10 ,就需要向它临近高位进一,即逢十进一; 二进制是程序员更熟悉进位方式,也是随着计算诞生发展起来,它只有 0 1 两个符号。...计数过程中,当某一位满 2 ,就需要向它临近高位进一,即逢二进一; 八进制十六进制同理。 那么,为什么计算机要使用二进制数制,不是人类更熟悉十进制呢?...补码补码才是解决机器数运算效率关键, 计算机中所有 “整型类型” 负数都会使用补码表示法; 正数补码是原码本身; 零补码是零; 负数补码反码基础上再加 1。...在前文讲补码地方,我们提到计算机所有 “整型类型” 负数都会使用补码表示法,刻意强调 “整数类型” 是什么原因呢,难道浮点数整数计算机中表示方法不同吗?

2.6K11

C语言基础--数据类型

这是我参与「掘金日新计划 · 10 月更文挑战」2天,点击查看活动详情 1.数据类型介绍 C语言中有很多内置类型,如 char //字符数据类型...事实上,计算机中存储整型方式存在三种,分别是原码 反码 补码 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。...反码 将原码符号位不变,其他位依次按位取反就可以得到了。 补码 将反码加1即可得到 那么为什么计算机还要再负数上区分出原码反码补码转化关系呢?...为什么对于整形来说:数据存放内存中其实存放补码为什么不直接使用原码存储,这样岂不是更加方便?...//00000000000000000000000000000000 --相加后结果为0 return 0; } 通过上面的正反对比就可以知道为什么在内存中存储补码 计算机系统中,

1.1K20

深度理解 原码, 反码, 补码

探求为何机器要使用补码之前, 让我们先了解原码, 反码补码概念.对于一个数, 计算机要使用一定编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字编码方式. 1....通常也需要转换成原码计算其数值. 三. 为何要使用原码, 反码补码 开始深入学习前, 我学习建议是先"死记硬背"上面的原码, 反码补码表示方式以及计算方法....而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码, 实际上是这个数对于一个膜同余数. 而这个膜并不是我们二进制, 而是所能表示最大值!...这就和钟表一样, 转了一圈后总能找到可表示范围内一个正确数值! 2+126很显然相当于钟表转过了一轮, 因为符号位是参与计算, 正好溢出最高位形成正确运算结果....既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

1K50

【C 数据存储详解】(1)——深度剖析整形数据在内存中存储

来了解下面的概念: 1. 原码、反码、补码 计算机中整数有三种2进制表示方法,即原码、反码补码。 三种表示方法均有符号位和数值位两部分: 符号位都是用0表示“正”,用1表示“负”。...计算机系统中,数值一律用补码来表示存储。...如果直接将两个操作数原码进行相加,是可能会出错: 举个例子: 1+(-1),我们用原码相加,得到错误结果 用补码计算: 最终用补码相加得到结果才是正确!!!...大家可以自己试一下 然后我们创建两个变量,看一下,内存给我们展示出来不是补码我们可以看到对于ab分别存储补码。但是我们发现顺序有点不对劲,好像是相反。 这是又为什么?...2.大小端介绍 上面我们发现,对于ab分别存储补码。但是我们发现顺序有点不对劲,好像是相反为什么? 学完下面的内容,我们就清楚了。

15310

Java中,为什么byte类型取值范围为-128~127?

大家好,又见面了,我是你们朋友全栈君。 在学习Java基础语法时候,初学者我们可能都会有这么一个疑问为什么byte类型取值范围为什么是[-128,127]不是[-127,127]。...---- 解释这个问题之前我们需要了解几个概念:机器数、真值、原码、反码、补码 机器数: 一个数计算机中二进制表示形式, 叫做这个数机器数。...负数补码:反码+1 例如: 解释:为什么byte类型取值范围为-128~127? 现在我们知道了计算机可以有三种编码方式表示一个数....既然原码才是被人脑直接识别并用于计算表示方式, 为何还会有反码补码呢?   首先, 因为人脑可以知道第一位是符号位, 计算时候我们会根据符号位, 选择对真值区域加减....因为机器使用补码, 所以对于编程中常用到32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示是符号位.而使用补码表示又可以多保存一个最小值。

1K20

深入理解计算机系统(2.4)------整数表示(无符号编码补码编码)

上图唯一一个与机器有关取值范围是 long 类型,64位机器使用8个字节(264),32位机器使用4个字节(232)。   ③、负数范围要比正数范围大1。这是为什么呢,请接着往下面看。   ...而在计算机中,最常见表示有符号数就是补码补码定义如下: ?   其中最高有效位 xw-1 也称为符号位,符号位为 1 表示负数,当设置为 0 ,表示非负数。下面我们看几个例子: ?    ...那么你就应该明白了为什么十进制 -1计算机中二进制表示为 1111 1111,不是1000 0001,因为计算机是以补码形式表示。  ...5、反码原码   反码定义:除了最高有效位权是-2w-1-1不是-2w-1其余补码表示方式一样 ?   原码定义:最高有效位是符号位,用来确定剩下位是正还是负 ?   ...6、有符号无符号数之间转换    信息存储表示 这篇博客中我们讲过计算解释一个数据类型主要有四个因素:位排列规则(大端或者小端)、起始位置、数据类型字节数、数据类型解释方式。

2.3K61

原码, 反码, 补码,你搞明白了吗?

探求为何机器要使用补码之前, 让我们先了解原码, 反码补码概念.对于一个数, 计算机要使用一定编码方式进行存储....通常也需要转换成原码计算其数值. 三、为何要使用原码, 反码补码 开始深入学习前, 我学习建议是先"死记硬背"上面的原码, 反码补码表示方式以及计算方法....而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码, 实际上是这个数对于一个膜同余数. 而这个膜并不是我们二进制, 而是所能表示最大值!...这就和钟表一样, 转了一圈后总能找到可表示范围内一个正确数值! 2+126很显然相当于钟表转过了一轮, 因为符号位是参与计算, 正好溢出最高位形成正确运算结果....既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

49410

原码、反码、补码知识详细讲解(超细致,建议收藏)

探求为何机器要使用补码之前, 让我们先了解原码, 反码补码概念.对于一个数, 计算机要使用一定编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字编码方式. 1....通常也需要转换成原码计算其数值. 三. 为何要使用原码, 反码补码 开始深入学习前, 我学习建议是先"死记硬背"上面的原码, 反码补码表示方式以及计算方法....而这个余数, 正式我们期望计算结果: 2-1=1 所以说一个数反码, 实际上是这个数对于一个膜同余数. 而这个膜并不是我们二进制, 而是所能表示最大值!...这就和钟表一样, 转了一圈后总能找到可表示范围内一个正确数值! 2+126很显然相当于钟表转过了一轮, 因为符号位是参与计算, 正好溢出最高位形成正确运算结果....既然反码可以将减法变成加法, 那么现在计算使用补码呢? 为什么反码基础上加1, 还能得到正确结果?

68450

单精度浮点数取值,表示以及相关

,表示不是一个数NAN 剩下计算方式为 (−1)^signbit × 2^(exponentbits−127) × 1.fractionbits 补码 到底什么是补码,一直到看了 这个知乎回答 之前,...回答这个问题之前,首先问一下,如果补码就是简单反码加一为什么要叫补码为什么不直接叫反码加一呢,这里就要提出一个概念,叫补数。...这里1补数就是 12 - 1 = 11.减去一个数,就相当于加上这个数补数,所以我们得到2 - 1 = 2+11。...为了方便比较大小,浮点数使用移码表示阶码。 移码,顾名思义,就是当前码通过(坐标轴上)移动之后获得码,移动距离称为偏置(bias)。...ps:为什么为什么用127做偏置不是128:据说是为了让数表示范围对称( 原文 ),但是感觉比较牵强而且也不比用128对称 半精度与单精度转换 主要是最近在研究f16f32转换才看了上面一堆东西

3K20
领券