学计算机还能不懂二进制(原码反码补码各种运算)

一.进制运算的基本知识

1.1 进制概述

  • 进位制是一种计数方式,亦称进位计数法或位置计数法
  • 有限种数字符号来表示无限的数值
  • 使用的数字符号的数目称为这种进位制的基数或底数(比如:使用的数字符号的数目为10[0-9],即为十进制)

计算机因为有高低电平两种形式,所以非常适合二进制这种形式,但是有些情况使用二进制表达太冗长了,可以使用大进制位编码二进制位来解决这个问题,八进制、十六进制满足2的n次方的要求,所以在计算机中也经常使用八进制和十六进制表达特定内容。

1.2 进制运算的基础

如下图所示:N为正整数,dx为N的自右向左的第x-1位,r为基数
在这里插入图片描述
二进制转换十进制:按权展开法
按权展开法与上图类似

  • 整数:N=(01100101)=1×26+1×25+1×22+1=101
  • 小数:N=(0.11001)=1×2-1+1×2-2+1×2-5=25/32

十进制转换为二进制:整数——重复相除法;小数——重复相乘法

  • 整数
    取余数自底向上N=101=(01100101)
重复除以2得商取余
101/2501
50/2250
25/2121
12/260
6/230
3/211
1/201
  • 小数
    取余数自上向下N=25/32=(0.11001)
重复乘以2得积取整
25/3250/32=1+9/161
9/1618/16=1+1/81
1/41/4=0+1/20
1/41/2=0+1/20
1/21=1+01

二.二进制数据的表示方法

2.1 有符号数与无符号数

使用0表示正数,使用1表示负数,把符号位放在数字位最前面。 这就是原码表示法,上文所介绍的转换方法也是针对原码而言。

原码表示法

  • 优点:表达简单明了,是人类最容易理解的表示方法
  • 缺点:0有两种表是方法(00、10)有歧义;进行异号数运算时非常复杂

对于原码的缺点,我们希望有一种表示方法可以用正数代替负数;希望找到不同符号操作数更加简单的运算方法;希望可以使用加法操作代替剑法操作。

2.2 二进制的补码表示法

n表示x的位数
补码表示方法
例:x=-13的补码
第一步:原码 x=1,1101
第二步:补码 x=24+1-13=100000-1101=1,0011
实现了正数替代负数,但计算补码的过程还是使用了减法。

2.3 二进制的反码表示法

反码的目的是找出原码和补码之间的规律,消除转换过程中的减法。

规律:负数的反码等于原码除符号位外按位取反,负数的补码+1。

2.4 小数的二进制补码表示

二进制小数的补码
例:x=-11/32的补码
原码:x=1,0.01011
反码:x=1,1.10100
补码:x=1,1.10101
规律:负数的反码等于原码除符号位外按位取反,负数的补码+1。

三.二进制的运算

3.1 定点数与浮点数

3.1.1 定点数的表示方法

小数点固定在某个位置的数称之为定点数。表示纯小数时候,把小数点放在符号位与数值位之间;表示纯整数时候,把小数点放在符号位和数值位之后;表示既非纯整数又非纯小数时候,则应乘以比例因子(小数点左移、右移几位)以满足定点数保存格式。

3.1.2 浮点数的表示方法

为什么引入浮点数?
计算机处理的很大程度上不是纯小数或纯整数;数据范围很大,定点数难以表达。

  • 表示格式:N=S×rj,S——尾数,r——基数,j——阶码
    表示格式

  • 表示范围:假设阶码数值取m位,尾数数值取n位
    在这里插入图片描述

  • 单精度浮点数:使用4字节、32位来表达浮点数(float)

  • 双精度浮点数:使用8字节、64位来表达浮点数(double)

  • 浮点数的规格化:尾数规定使用纯小数;尾数最高位必须是1

例:设浮点数字长为16位,阶码位5位,尾数为11位,将十进制数 -54 表示位二进制浮点数
原码:x=1,110110
浮点数规格化:x=-0.110110×2110

阶码符号位阶码数值位尾数符号位尾数数值位
0011010010100000

注:尾数因为是纯小数补0要在尾部补,而且尾数要变为补码。

3.1.3 定点数与浮点数的对比

  • 当定点数与浮点数位数相同时,浮点数表示的范围更大
  • 当浮点数位数为规格化数时,浮点数的精度更高
  • 浮点数运算包含阶码和尾数,浮点数的运算更为复杂
  • 浮点数在数的表示范围、精度、溢出处理、编程等方面均优于定点数
  • 浮点数在数的运算规则、运算速度、硬件成本方面不如定点数

3.2 定点数的加减法运算

3.3 浮点数的加减法运算

3.4 浮点数的乘除法运算

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值