补数/补码的意义

原创 2016年08月30日 15:49:40

前言

之前在大学的数字电子技术这门课程学到这个概念,但一直没有应用过,最多就是做过课后作业。本人目前做的是工控行业,工控就离不开电机的控制,工控行业里常见的三种控制方案,一是PLC,二是运动控制卡,三是单片机,我做的是的单片机这一块,众所周知定时器是单片机的基础外设,而行业内对使用单片机对电机进行控制,往往用的是定时器。使用定时器对电机控制的方式有溢出中断的方式,还有就是比较中断的方式,这里使用的是比较中断的方式,又因为电机的加减速表是用软件自动生成的,生成的表为升序表,升序表很显然不能用比较中断的方式进行控制,否则电机得运动就变成先减速后匀速然后又加速,显然不是我们需要的,我们需要的电机运动过程是先加速后匀速最后减速这么一个过程。如果我们能把升序表变成降序表,问题不就解决了吗?对,没错。那有什么方法呢?我们分析了一下电机的运动过程,如果能按照逆方向运行,那就是我们想要的了,于是想起了钟表的运行,当前指针指向6点钟方向,要指向3点钟方向,我们可以顺时针转过9格,也可以逆时针转过3格,这也是补码的一个典型特点,于是就联想到了补码。通过补码我们就可以把整数把大化小,把小化大,这样就能把升序表变成降序表了,于是问题就迎刃而解了。下面我们来讲下关于补数的基本知识。

补数是一种处理有符号数的方法,用于变换数字的符号。常在计算机科学中应用,被称为【补码】,在台湾和香港被称作二补数。

关于补码
补数在计算机中被成为补码(在港台被称为二补数)
有符号的二进制数的补码运算方法为:
正数:补码为其本身
负数:除符号位外,所有位取反(即原码的反码),然后+1(简称为求反加一)。
如:-1101 的补码为
1. -1101的原码为 11101(第一位为符号位)
-1101的反码为 10010(第一位为符号位)
-1101的补码为 10011(第一位为符号位)
整数的补码定义
[x]补={ 0,x|( 2^n >x >=0)}和{ 2^(n+1)+x|(0>x>=-2^n)(mod 2^(n+1))

 

计算机科学中的应用

计算机科学中,补数的最大应用点为,在处理加法和减法中,不会因为数字的正负使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补数来表示,因此只要有加法电路及补数电路即可完成各种有符号数的加法及减法,电路设计上相当方便。

 

补数的概念
在日常生活中,常常会遇到补数的概念,例如时钟指示为六点,想要它指向三点,可以按顺时针方向将分针转九圈,也可以逆时针方向转三圈,结果是一致的。由于时针转一圈为12小时,而其中12在时钟里是不被显示而自动丢失的,即15-12=3,15点和三点在时钟表示上是一致的。想想一下,在时钟这个问题上,任何时候时针向顺时针转九圈和逆时针转三圈的效果都是一致的,我们将方向定位正负,即-3与+9等价。而数学上称12为模写作(mod 12),而称+9是-3以12为模的补数记为
-3  +9(mod 12)
-4  +8(mod 12)
-5  +7(mod 12)
【以上截取自《计算机组成原理·第二版》唐朔飞著p221】
可以将模理解为一个足够大的正数,足够大到比你运算所有数字的绝对值都要大。


结论:(在模确定的情况下)
一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身来得到。
一个正数和一个负数互为补数时,两数的绝对值之和为模
正数的补数为其自身。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

补码的意义

计算机中CPU内运算器应该是用ACC来完成加减法运算的。但是Accumulator怎么完成减法运算呢?唐朔飞的教材中这样描述了补码的诞生。        为了用ACC计算加减法,那么对真值进行了分类,...

原码、补数、补码以及计算机中为什么用补码存储

原码:最左侧一位表示符号,且0表示正数,1表示负数;二进制转换为十进制时,符号位只用于取正负号,不参与转化。 例如1个字节的二进制: 0000 0001表示十进制的1; 0000 1010表示十进制的...

c# 数组详解

数组即是一组相同类型组合在一起,使用一个通用的名称,通过分配的下标访问的数据集合中的元素。 数组是具有相同类型的一组数据。当访问数组中的数据时,可以通过下标来指明。c#中数组元素可以为任何数据类...

详解C#引用类型String

转自:.NET,你忘记了么?(六)——再谈String  一. 文章伊始 在文章之前,说下写出这篇文章的目的。在我昨天的一篇文章>中,我在文中提到了关于String的字符串驻留机制。在文章的评论...
  • f10_s
  • f10_s
  • 2013年11月09日 21:19
  • 3402

论补数和补码的关系

我们都知道,补数 引申到 计算机中 就是 补码的概念, 可是 为什么呢? 我们先来 看看 各自的 定义…… 补数: 在日常生活中,常常会遇到补数的概念。例如,时钟指示为6点,欲使它指示3点,既可按顺时...

Leetcode 476. Number Complement 补数 解题报告

1 解题思想这道题给了一个正的整数,然后需要计算一个特殊的补数,这个补数的计算方式是: 1、对于这个整数num,转换成对应的二进制表示,这个二进制表示共有x位(不高于32) 2、将这x位取反后,得...
  • MebiuW
  • MebiuW
  • 2017年01月13日 14:19
  • 1997

补数的概念和取模运算

补数的概念和模运算

二补数 (2's complement)

二补数 (2's complement) :是一种用二进位表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。 一个数字的二补数就是将该数字作位元反向运算(即一补数),再将结果...

各种数值计算机内存的存储规则、补码计算、内存数据位扩展和具体意义、关于位运算

//关于数据在计算机内存中的存储:无论什么数值,也无论这个数值是用什么进制表示,计算机存储的都是这个数值的补码。     //如果表示这个数值的时候,前面有+号或者没有加符号,则认为是正数,这个时候...
  • gukesdo
  • gukesdo
  • 2012年04月09日 20:51
  • 2285

原码、反码与补码及其意义

原文地址:http://blog.chinaunix.net/uid-495923-id-1989253.html 原码、反码与补码及其意义  (1)数值数据的表示  我们把一个数在计算...
  • flycct
  • flycct
  • 2016年01月24日 14:59
  • 748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:补数/补码的意义
举报原因:
原因补充:

(最多只允许输入30个字)