整数补码——如何定义相反数。
整数补码——如何定义相反数。
出现的原因
想要表示3+5,可以转化为8位2进制:0000 0011+0000 0101=0000 1001。
结合二进制加法,这是很容易的。那么减法该怎么办?
3-2=3+(-2),那么我们只要表示-2即可。为此,我们提出了反码来表示一个整数的相反数。
原理
以8位2进制为例:一个整数的储存只能转化为8位2进制,如果是9位的,那么第9位就溢出了。形象一些来讲:计算机的视野只能看到8位,多了一位进来就把第9位顶出去了,但是计算机只能看到8位,所以第9位它是看不到的。
利用这个特点,我们设计出了补码系统。设我们现在用的是X位2进制,也就是说:如果我们想要表达一个大于2^X的正整数,那么X位2进制是存不下这个数字的,转换为2进制后,这个数字将从右向左数X位存入,剩下的左边的数字就被裁掉了。
以8位2进制为例,例如:
可以看到这是一种类似于“周期”的特性。以8位二进制为例,那么这个周期就是:
由于"周期"+"溢出",我们很自然的得到了一个"用周期溢出表示相反数"的方法.
即用周期来减一个数字,就可以得到它的负数。根据这个方法,我们就可以设计储存相反数了。
例子
先看一个例子:
假设我们使用8位2进制表示2的补码:
用这个8位2进制所能表达的最大整数+1,也就是周期来减。我们先写出这个周期为:
但是由于8位2进制只能有8位,我们这个周期有9位,无法运算,所以我们把它拆成两步:
所以我们先用第一部分
不难发现这一部分的运算有一个特点:给减数求反。这就是反码的由来。
再用得到的结果加上刚刚的1得:
右面的这个数就是2的补码:-2.
这就是“按位取反再加1”的由来。这样我们就可以进行减法操作了,即:
由于我们采用8位2进制,最左面一位1将会溢出,最后储存在这个8位2进制变量中的2进制数为:
这样一来,我们就可以表示减法了。
进一步地思考
回头看8位有符号整数的储存:最左边一位为0则表示非负数,最左边一位为1则表示负数。因此8位有符号整数可以表示的数字范围是:
这与补码有什么关系呢?容易证明,只要我们定义右7位表示的数为非负数,通过取反码自然可以得到负数的8位2进制表示,最左侧位一定为0.这告诉我们:在支持反码的系统中,n位2进制只能表示:
更进一步地:
这也解释了为什么两个正数相加可能会溢出得到负数——这运用到了补码的“溢出”原理。
原理的数学解释
事实上,如果引入数论中同余的概念,这一性质将会更容易被展现:
举例来说:
待补充……(似乎用数论的观点看待有点复杂化了)
参考资料
1.黄程程讲编程 Java016 深入理解二进制及整数补码
2.原码, 反码, 补码 详解
整数补码——如何定义相反数。相关推荐
- 两数之差的补码等于被减数的补码与减数相反数的补码。_二进制的原码、反码、补码...
一.十进制与二进制的相互转换 1. 十进制转换为二进制,分为整数部分和小数部分. 整数部分采用除2倒取余法,具体做法:用2去除十进制整数,可以得到一个商和余数:在用2去除商,又会得到一个商和余数,如此 ...
- c语言相反数补码,C语言中补码的整数运算特性
前言 本篇博客以"SSD6-Exercise2-Data Lab: Manipulating Bits"为例,分析在对C语言中的整数采用补码(two's-complement)编码 ...
- 网易2018校园招聘:相反数 [python]
''' [编程题] 相反数 时间限制:1秒 空间限制:32768K 为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数". ...
- 求一个数的相反数的补码
1.已知8位二进制表示的整数X的补码为10011011,则-X的补码的二进 制编码为( 01100101 ). 解析:已知x和-x的反码是互为相反的,所以已知x的补码,[x]反 = [x]补 - 1 ...
- 找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...
今天继续和大家一起来学习初中数学,初一的相关知识,在前面已经介绍了正数和负数,对于有理数也有了清楚的认识,今天我们来学习相反数,相反数的概念和表示是中考命题的热点之一,经常结合其他知识点一起考察,本节 ...
- 位运算获取相反数详解
位运算有很多化腐朽为神奇的操作,取相反数就位列其中,我们总是用[取反+1]来求相反数,就如同公式一样使用,可否曾仔细琢磨过其中的原理呢? 为什么[取反+1]是相反数? 在数学中,互为相反数的两数相加为 ...
- 取反(~)和相反数 是不一样的!!!
这几天正在看补码的问题,发现这个东西实在是太神奇了, 在计算机存储的都是按照补码的方式,这样的方式可以进行计算,但是除了补码还有原码和反码 他们虽然都可以表示数字,但是原码和反码不能进行计算,就是不符 ...
- 首师大附中OJ系统 0007 相反数的问题
相反数的问题 这里可以快速跳转 试题要求 试题分析 试题代码 试题要求 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 小雅刚学 ...
- ACMNO.31 C语言-宏求余 输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
题目描述 输入两个整数,求他们相除的余数.用带参的宏来实现,编程序. 输入 a b两个数 输出 a/b的余数 样例输入 3 2 样例输出 1 来源/分类 C语言 题目截图: 思路: 这个是求余数,应该 ...
最新文章
- day16-小数据池
- 【剑指Offer】16重建二叉树
- 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之外网客户端
- k8s通过label来控制pod的位置
- python 单一继承定义_Python学习之单继承与多继承
- 阿里的爱心助农“生意”:严把质量关 一场多业务线的联动大练兵
- 如何在内存中存储有序数据?
- Hspice 反相器仿真
- 马云创业过程中的10次失败(转)
- Internet结构和ISP
- 【C++OJ多重继承与虚拟继承】商旅信用卡(多重继承)
- Windows蓝屏死机骗局:新的恶意钓鱼方式
- 【MOS管电平转换电路的一点思考】
- 一眼就吸引人的网名「引人注目」
- 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验
- 最全的 JVM 面试知识点(二):垃圾收集
- 业务规范之springboot整合swagger2
- 家庭光纤宽带延长光纤
- WPA3也不安全啦?WPA3-R3 H2E了解一下
- 手把手教你用Python轻松玩转SQL注入
热门文章
- 荣耀畅玩9a有机会申请鸿蒙系统吗,关于荣耀畅玩9A你不知道了一面,我想分享一下...
- html5 dreamlive,TME live追梦之夜线上演唱会,Dream Team为梦想而战
- 20.JDBC操作数据库
- 麦芒装饰小程序配置问题处理
- c++继承 子类构造函数出现报错no matching function for call to ‘xxx::xxx()
- python虚拟环境venv、virtualenv
- 运用css和Html动画实现会动的摩天轮
- Lesson 5 No wrong numbers 无错号之虞
- 一天300个快递,康小康团队都撸些什么商品回来?
- 我有一个梦想(马丁·路德·金在林肯纪念堂前的演讲词)