文档章节

重温计算机二进制补码

何川jad
 何川jad
发布于 2017/07/26 00:18
字数 879
阅读 13
收藏 0

       亚里士多德说:“今天十进制的广泛采用,只不过是我们绝大多数人生来具有10个手指头这个解剖学事实的结果。”然而,数在计算机中确是以二制形式表示的,因为计算机是用数字电路搭成的,数字电路中只有1和0两种状态,也就是说计算机只有两个手指头,所以对计算机来说二进制(Binary)是最自然的计数方式。

       实事上,数在计算机中不仅仅是以二进制形式表示,而且是以二进制的补码形式表示的,何为补码?为什么要用补码?下面从数计算机表示形式说起。
数分为有符号数和无符号数,对于有符号数,它有三种表示形式:原码、反码和补码。在它的二进制原码中,用最高位表示符号位,如果最高位为0,表示该数为正数,最高位为1则表示为负数。比如00000001是1的原码,而10000001则是-1的原码。

       因为人为的把一个数字的原码最高位定义为符号位,而计算机在运算的过程中,如果用原码计算,可能并不能正确的识别,比如假设字长为8bits 要完成,1-1 =0的运算时,计算运算过程如下:

( 1 ) - ( 1 )

= ( 1 ) + ( -1 )

= (00000001)+ (10000001) -------原码计算

= (10000010)= ( -2 )

这结果显然不正确,不正确的原因就是因为-1的高位符号位被当做普通数位参与运算了。

       为了让符号位一起参与计算而不出现错误,引进反码和补码的概念:原于正数而言,它的反码与补码跟原码相同,对于负数而言,它的补码是在原码的基础上保持符号位不变,而其它各位取反得到反码,补码则被定义成它的补码加1即:

正数:

       原码=反码=补码
负数:

       反码=其原码除符号位之外的各位求反

       补码=反码+1  (如果+1之后有进位的,要一直往前进位,包括符号位)

补码有以下几个特性:

1.补码本身具有幂等性:该特性决定我们虽然运算使用补码,但是通过两次补码可以回到原码;
  ((X)补)补=X
   a+b=(a补+b补)补

2.补码解决了正0 0的二义性,使0的表示得到统一
  正零:00000000
  负零:10000000
  这两个数其实都是0,但他们的原码却有不同的表示。
  但是他们的补码是一样的,都是00000000

3.CPU将加,减法统一为加法运算
  [a-b]补=a补+(-b)补

4.使符号位能与有效值部分一起参加运算,从而简化运算规则。

5.补码使二进制的加、减、移位等操作和十进制具有相同的运算规律;

6.负数-a实际上使用0-a结果,通过二进制运算0-a就是-a的补码,由此可见定义补码就是要求所有算术运算符合现有的运算规律

       正因为如此,计算机底层都是采用补码进行计算的。

上文中粗体字体或红色字体的内容为重点了解或者记忆的内容,更多信息,请用微信扫码关注本人公众号

© 著作权归作者所有

共有 人打赏支持
何川jad
粉丝 26
博文 24
码字总数 57010
作品 0
广州
私信 提问
二进制补码

二进制补码 青蜂侠2017-12-165 阅读 二进制 为便于表达,在这里假定是在8位机器表示 二进制补码表示 无符号十进制整数x的二进制表示是之间将x不断整除2,然后将余数反向排列得到。比如8的二进...

青蜂侠
2017/12/16
0
0
补基础:自学:计算机科学导论 第三章 数据存储

3.1 数据类型 数字 文字 音频 图像 视频 计算机内部的数据 所有计算机外部的数据类型的数据都采用统一的数据表示法转换后存入计算机中,当数据从计算机输出时再还原回来。这种通用的格式称为...

soulpei
2018/06/26
0
0
原码 && 反码 && 补码

原码 && 反码 && 补码 一、原码 && 反码 && 补码 原码 原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为...

秋风醉了
2014/07/27
169
0
Java位运算符及二进制常识

一、位运算    二、位移运算    三、二进制数   以Java中最常使用的int类型为例(32位)。    ㈠ 符号位   二进制数最左端的数字为符号位:0代表正,1代表负。 ㈡ 最大与最小   ⑴...

Xcafe
2016/12/29
36
0
为什么int整型(32位)的范围是-32768到32767?

计算机为什么要用反码存储整型 这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为1111111111111111=-2的15次方减1=-32767 此时0...

lcniuren33
2012/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

图像库stb_image

https://github.com/nothings/stb 目前一般主流的图像格式也就是bmp,jpg,png,tga,dds,除了DDS一般是给DX用的,虽然一堆OpenGL程序也有用的,但是我一般只用png和tga, png不用说了,带a...

robslove
2分钟前
0
0
Spring 事务提交回滚源码解析

前言 在上篇文章 Spring 事务初始化源码分析 中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring 是如何去获取事务,当目标方法异常后,又是如何进行回滚的,又或是目标方法执行...

TSMYK
21分钟前
0
0
百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
47分钟前
2
0
扒站wget仿站

wget -c -r -p -np -k http://xxx.com/xxx 其中: -c, --continue (断点续传) 接着下载没下载完的文件 -r, --recursive(递归) specify recursive download.(指定递归下载) -p, --page...

临江仙卜算子
50分钟前
2
0
Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部