栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

原码,反码和补码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

原码,反码和补码

文章目录
  • 前言
  • 一、概念
  • 二、取值范围


前言

原码、反码、补码知识点的一些整理,如有错漏请提出


一、概念

原码、反码、补码是计算机语言的一种编码方式。原码即为数本身的二进制写法,最高位记为符号位,0代表正数,1代表负数。以4位有符号数为例,如+5:0101,-5:1101。
在计算正数相加时,我们可以直接将两数加起来,但在计算两数相减(正数+负数/负数相加)的情况时,计算机内部仍旧是以加法形式运行,原码就存在它的局限性。反码与补码便是用来解决这一问题的。
反码:正数反码=其原码,负数反码=其原码按位取反
补码:正数补码=其原码,负数补码=其反码+1

+5-5
原码01011101
反码01011010
补码01011011

如上表所示,将+5与-5相加之和应为0,用原码相加得:0010(4位数,最高位舍去),用反码相加得:1111,仍旧不为0,而采用补码相加得到:0000,结果正确。


二、取值范围

4位无符号数的取值范围为0~15
4位有符号数的取值范围为-8~7
看到这个取值范围的时候,有一点不能够理解为什么会出现-8
罗列出4位有符号数的所有取值:0000,0001,0010,0011,0100,0101,0110,0111
1000,1001,1010,1011,1100,1101,1110,1111
正数可看出来为0-7,负数为1000和-1~-7,多出来一个1000,按照反码的写法来看1000应该为-0,但是在正数中已有了一个0,编码需要一一对应,因而规定1000为-8。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号