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

这里写目录标题

  • 一.进制运算的基本知识
    • 1.1 进制概述
    • 1.2 进制运算的基础
  • 二.二进制数据的表示方法
    • 2.1 有符号数与无符号数
    • 2.2 二进制的补码表示法
    • 2.3 二进制的反码表示法
    • 2.4 小数的二进制补码表示
  • 三.二进制的运算
    • 3.1 定点数与浮点数
      • 3.1.1 定点数的表示方法
      • 3.1.2 浮点数的表示方法
      • 3.1.3 定点数与浮点数的对比
    • 3.2 定点数的加减法运算
    • 3.3 浮点数的加减法运算
    • 3.4 浮点数的乘除法运算

一.进制运算的基本知识

1.1 进制概述

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

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

1.2 进制运算的基础

如下图所示:N为正整数,dx为N的自右向左的第x-1位,r为基数
学计算机还能不懂二进制(原码反码补码各种运算)_第1张图片
二进制转换十进制:按权展开法
按权展开法与上图类似

  • 整数: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/2 50 1
50/2 25 0
25/2 12 1
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1
  • 小数
    取余数自上向下N=25/32=(0.11001)
重复乘以2 得积 取整
25/32 50/32=1+9/16 1
9/16 18/16=1+1/8 1
1/4 1/4=0+1/2 0
1/4 1/2=0+1/2 0
1/2 1=1+0 1

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

2.1 有符号数与无符号数

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

学计算机还能不懂二进制(原码反码补码各种运算)_第2张图片

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

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

2.2 二进制的补码表示法

n表示x的位数
学计算机还能不懂二进制(原码反码补码各种运算)_第3张图片
例:x=-13的补码
第一步:原码 x=1,1101
第二步:补码 x=24+1-13=100000-1101=1,0011
实现了正数替代负数,但计算补码的过程还是使用了减法。

2.3 二进制的反码表示法

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

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

2.4 小数的二进制补码表示

学计算机还能不懂二进制(原码反码补码各种运算)_第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——阶码
    学计算机还能不懂二进制(原码反码补码各种运算)_第5张图片

  • 表示范围:假设阶码数值取m位,尾数数值取n位
    学计算机还能不懂二进制(原码反码补码各种运算)_第6张图片

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

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

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

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

阶码符号位 阶码数值位 尾数符号位 尾数数值位
0 0110 1 0010100000

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

3.1.3 定点数与浮点数的对比

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

3.2 定点数的加减法运算

3.3 浮点数的加减法运算

3.4 浮点数的乘除法运算

你可能感兴趣的:(计算机基础知识)