整数的表示其实是比较简单的,无非是解决符号位、数字表示的唯一性等问题。

整数在计算机中是使用补码表示的,在讲解补码前,先看一下相关概念。

机器数与真值

数值在计算机中的表现形式叫做机器数,该数值就是机器数代表的真值。机器数是真值在计算机中的表现形式,真值是机器数的代表的数值。比如5在计算机中的表现形式是00000101,所以00000101就是5的机器数,5就是机器数00000101所代表的真值。

整型数在计算机中的编码方式

C语言中的整型数分为有符号数和无符号数两种类型,无符号数代表的都是非负整数,所以在计算机中直接用二进制值表示就可以,但是有符号数既可以表示正整数,也可以表示负整数,所以有符号数在计算机中不能直接用二进制值来表示,需要使用补码的方式来表示。

有符号数在计算机中的编码方式

编码方式是为了解决有符号数在计算机中的表示方式。计算机中的编码方式主要有原码,反码,补码三种方式。

原码

假定机器字长4字节,原码的编码方式规定如下:

最高位是符号位,用0代表正数,用1代表负数,其它位就是真值的绝对值对应的二进制值,比如十进制数5的二进制值是101,又因为5是正数,所以最高位是0,其它位是0000000 00000000 00000000 00000101,完整格式如下:00000000 00000000 00000000 00000101。

上面描述了正数的原码,下面我们看一下负数的原码,比如-5,因为它是负数,所以最高位用1表示,又因为-5的绝对值是5,所以它的绝对值是101,因为它的原码是10000000 00000000 00000000 00000101。但是原码有两个问题,一个是0有两种表示方式,这不符合数学习惯,另一个问题是[5]原+[-5]原=[10000000 00000000 00000000 00001010]原=-10!=0,所以使用原码无法实现正负数的加法运算,也就是说不能实现5-5=0。

反码

为了解决原码中两个正负数相加不等于0的问题,人们设计了反码,反码的规定如下:

正数的反码就是原码,负数的反码最高位是符号位,其它位是它所对应的原码除符号位之外,其它位全部取反。就是原码中除符号位外,0变1,1变0。比如5的原码是00000000 00000000 00000000 00000101,因为5是正数,所以它的反码和原码一样。再比如-5的原码是10000000 00000000 00000000 00000101,因为它是负数,所以除了符号位,其它全部取反,所以它的反码是11111111 11111111 11111111 11111010,所以5-5=[00000000 00000000 00000000 00000101]反+[11111111 11111111 11111111 11111010]反=[11111111 11111111 11111111 11111111]反 = -0,因为0无所谓正负,所以它代表的就是0,所以反码解决了原码相对数相加不等于0的问题,但是,0分为正0和负0不符合数学习惯,所以人们继续改进,发明了补码。

补码

正数的补码和原码、反码一样,负数的补码为它的反码加1,所以5-5=5+(-5)=[00000000 00000000 00000000 00000101]反+[11111111 11111111 11111111 11111010]反= 00000000 00000000 00000000 00000101]补+[11111111 11111111 11111111 11111011]补= [00000000 00000000 00000000 00000000]补=0,所以补码解决了正负数相加不等于0的问题,又因为-0的反码加1和+0的补码一样,所以在补码中,0只有一个,就是[00000000 00000000 00000000 00000000]补,因此,在计算机中有符号数采用补码表示。

补码的数学原理

假设在计算机中用一个字节来表示整数,那么总共可以表示256个整数,如果这些数都是无符号数,那么表示范围是0~255。所以如果是两个无符号数相加,CPU设计就会非常容易,直接对这两个数做二进制运算就可以,但是,有符号数怎么办,因为有符号数涉及符号位的表示,减法的运算,所以如果用正常的逻辑思路去设计CPU的运算器,就需要解决符号位和减法运算的问题,这样CPU的设计就会非常麻烦,而且效率也不高,因此,有人想到了同余数的概念,同余数告诉我们在有限的连续变化空间内,一个二进制数代表的不仅是这一个数,而是与这个值同余的所有整数,比如11111111这个数既可以表示255,也可以表示-1,为什么呢?因为在1个字节存储空间的情况下,-1和255模256相等。又因为同余数的两个性质,一个是数a本身就是自己的同余数,另一个就是如果两个数a和b对m同余,并且c和d也是对m同余,那么,a+c和b+d对m同余。同余的本质就是说这些数对应的位置相同,因此,两个数a和b的减法,就可以表示成a和(-b)对m的补码的加法,并且它们对应的结果一样,这样就可以将有符号的减法运算转换为无符号的加法运算。下面,我们再具体论证一下,为什么它们的结果相等?因为a和自己是同余数,所以a和a对256同余,又因为-b和-b的补码对256同余,所以a-b和a+(-b的补码)对256同余,又因为同余代表的是同一个位置,所以a-b的结果与a+(-b的补码)的结果一样,因此,补码利用同余数的原理将有符号的减法转换为无符号的加法,从而简化了CPU运算器的设计。

原文传送门:请点击

转载于:https://www.cnblogs.com/mlgjb/p/8318314.html

整数在计算机里的表示相关推荐

  1. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回

    事物的正反两面被哲学家讨论了几千年.计算机里的0和1也照旧玩出了各种花样. 二进制数 VS 十进制数 本小节讲二进制写法,以及到十进制的转换方法,如果已熟悉这些内容可以直接跳到下一小节. 我们生活在一 ...

  2. 微软在你的计算机里隐藏的秘密

    看看吧!微软在你的计算机里隐藏的秘密!他们了防止人们发现这些隐藏的文件而尽了多大的努力! 在你的计算机里有很多微软试图隐藏的文件目录.在这些目录中你会(主要)发现有这样两种东西:Microsoft I ...

  3. 小王利用计算机设计了一个计算程序,七年级数学上册5.3代数式的值巧求计算机里的代数式的值素材(新版)青岛版...

    巧求计算机里的代数式的值 随着社会的发展,电脑已进入了寻常百姓家,为既能培养学生学习电脑的兴趣,又能培养学生的应用意识,各地中考试题出现了以计算机为背景的许多题目,解决这类题目的关键在于搞清计算机程序 ...

  4. 【汇编语言与计算机系统结构笔记02】整数的计算机表示与运算,C中的无符号字符(unsigned)和带符号字符(signed),补码,一些例题

    本次笔记内容: 03.整数的计算机表示与运算 文章目录 预备知识 数制 数的机器表示 机器字在内存中的组织 字节序(Byte Ordering) 整数表示 计算机中整数的二进制编码方式 无符号数与带符 ...

  5. 2的一百万次方 用计算机算,1M换算:计算机里,单位里1.大家都知道数字1M=10^6对吧(M=Million),以10为底,6次方 2.计算机里1...

    共回答了22个问题采纳率:100% 1.大家都知道数字1M=10^6对吧(M=Million),以10为底,6次方 这里的1M= 1 Million =1百万 = 10^6,这里的M是Million的 ...

  6. 整数在计算机中的表示

           整数包含正整数,负整数和0.从数学的角度来讲,整数是无穷无尽.列举不完的,整数的大小是没有限制的.但是,如果用计算机来表示整数,则不然.因为计算机是靠数字信号来表示数,计算机所能处理的整 ...

  7. 度用计算机怎么表示什么意思,潘云飞:计算机里讲的耦合度是什么意思?

    赵书录的回答: 计算机里讲的耦合度的意思是: 处理机之间连接的紧密程度,可用处理机之间的距离及相互连接的信号线数目表示计算机网络与多机系统在耦合程度上有明显差别:多机系统是紧耦合系统,计算机网络属于松 ...

  8. 计算机 缓冲区,计算机里的缓冲区

    简介这篇文章主要介绍了计算机里的缓冲区以及相关的经验技巧,文章约916字,浏览量249,点赞数9,值得推荐! 下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分.也就是说 ...

  9. (3)音频在计算机里是怎样存储的,什么是音频?

    描述 1)英文: audio frequency: voice frequency(VF). 2)音频一词已用作一般性描述音频范围内和声音有关的设备及其作用. 1.指人耳可以听到的声音频率在20HZ~ ...

最新文章

  1. 自定义jstl函数标签
  2. CTO关注:升级Win 10,除了更安全还有什么
  3. 组态王图素制作_组态王的图形及动画功能
  4. 金融业(互联网金融)创新---我的实地考察和见解
  5. Flask框架-蓝图系统
  6. 基于MATLAB的Sobel边缘检测算法实现
  7. 永辉生活APP卖茅台只收款不发货,永辉超市回应...
  8. dhcp服务器设置无线,无线网dhcp服务器设置
  9. C#中Delegate和Event以及它们的区别
  10. java重定向并保持同一个会话_当会话在Java Web应用程序中过期时,如何重定向到登录页面?...
  11. 【每日算法Day 69】面试经典题:分发糖果问题
  12. c语言延时程序 ms us,C语言延时程序(ms,us)
  13. android视频教程_创建数据库与完成数据添删改查,17_创建数据库与完成数据添删改查...
  14. 计算方法(数值分析)实验:勒让德多项式求展开的三次平方逼近多项式代码实现 java
  15. OpenERP 7.0入门(一):安装及开发环境部署
  16. 软件测试中的Bug基础知识总结
  17. 如何做好Windows2003服务器安全策略
  18. 大学计算机文件管理实验步骤,大学计算机实验报告
  19. Go语言学习笔记(三)---指针,运算符及流程控制
  20. 资料分享:送你一本《数据结构与算法:Python语言描述》电子书!

热门文章

  1. conda常用命令(换源清华源,创建虚拟环境)
  2. 如何学习vc++(vc的用处)
  3. Historian 7.0 安装说明
  4. 1202 -- 童年生活二三事
  5. 解决Oracle锁表问题
  6. 网络分层,图,易懂--对应 应用层、数据传输层、网络层、数据链路层
  7. k8s-client-go源码剖析(一)
  8. Idea使用Alibaba Cloud Toolkit
  9. split()方法,limit参数作用
  10. 开源自助BI工具,傻瓜式BI分析,支持多种数据源