关于二进制的一些运算

程序人生 专栏收录该内容
4 篇文章 0 订阅

十进制转二进制

正整数转二进制,这个简单,除2取余,倒着写。
容易忽略的是小数,乘2取整,正着写。

负数的话,在计算机中要用补码,因为计算机中加减乘除都得用加法。

机器数与真值

把符号“数字化”的数称为机器数。
把带“+”或“-”符号的数称为真值。

原码、反码、补码

正数最简单,原码、反码、补码都一样。
例:
真值:+1110(已经二进制)
原码:01110(0表示符号为正)
反码:01110
补码:01110

负数复杂一点,
例1:
真值:-1110(已经二进制)
原码:11110(1表示符号为负)
反码:10001(符号位不变)
补码:10010(取反加1)
例2:
真值:-0.1101(已经二进制)
原码:1.1101(由1-(-0.1101)得到,其实就是“-0”换成1)
反码:1.0010(符号位不变)
补码:1.0011(取反加1)

注意:
[+0.0000]=0.0000
[+0.0000]=0.0000
[+0.0000]=0.0000


[-0.0000]=1.0000
[-0.0000]=1.1111
[-0.0000]=0.0000

顺便说一说BCD码

它是用4个二进制表示一个十进制,24=16,所以表示十进制时有6个剩余,只需从
0000-1111 (16个)中选10个即可表示十进制。

8421码:0000-1001
2421码:0000-1111、0001-1110…它是一对一对的,这样选10个
余3码:0011-1100 前后各去3个,也是对称的。

数的定点表示与浮点表示

定点:
在这里插入图片描述
浮点:
在这里插入图片描述
直接通过例子说明:将-54表示成二进制定点数和浮点数。设浮点数字长16位,其中阶码5位(含1位阶位),尾数11位(含1位数符)。

定点机中:
真值:-110110
原码:10000110110(符号1位负,数值10位)
反码:11111001001
补码:11111001010

***浮点机中:***(类笔着科学计数法来想)
浮点数表示:-0000110110
规格化:-(0.1101100000)x 2110 (注意:110是二进制,即右移6位才和原来相等)
这样阶码、尾数就有了。
原码:0,0110;1.1101100000
反码:0,0110;1.0010011111
补码:0,0110;1.0010100000

补充:
同样以n=10;m=4,阶符和数符各取1位。
在这里插入图片描述

IEEE 754标准

在这里插入图片描述
在这里插入图片描述
阶码的真值都被加上一个常数。短实数加7FH,长实数加3FFH。临时实数加3FFFH。
例:
数值:178.125
二进制:10110010.001
浮点表示:1.0110010001 x 2111 (1.xxx的形式,最后表示时,省略(不写)那个1)
此时的阶码是:00000111,加上01111111(7FH)得10000110:
短实数表示为 10000110 01100100010000000000000(总的31位)

注意: 逆推的时候得记得加上1.xxx

定点运算

加法与减法运算

整数:[A]+[B]=[A+B](mod 2n+1
小数:[A]+[B]=[A+B](mod 2)

整数:[A-B]=[A]+[-B](mod 2n+1
小数:[A-B]=[A]+[-B](mod 2)

例1:
A=0.1011,B=-0.0101,求[A+B]
[A]=0.1011,[B]=1.1011
[A+B]=0.0110

例2:
A=+15,B=+24,求[A-B]
[A]=0,0001111,
[B]=0,0011000,[-B]=1,1101000 ([B]连着符号位取反加1)
[A-B]=1,1110111

由上可知:不论操作数是正还是负,在做补码加减法时,只需将符号位和数值部分一起参加运算并且将符号位产生的进为自然丢弃即可

溢出

  • 不论是做加法还是减法,只要两个操作数的符号相同,而结果又与原操作数符号不同,即为溢出。
    也就是将符号位产生的进位与最高有效位产生的进位异或操作,1则溢出,0则没有溢出。

  • 变形补码(2位符号位)
    当两位符号位不同时表示溢出,否则;无溢出。“10”表示负溢出;“01”表示正溢出。

    例1:
    x=+11/16 , y=+3/16
    [x]=00.1011;[y]=00.0011;
    [x+y]=00.1110 (00相同,无溢出)
    x+y=0.1110

    例2:
    x=-11/16 , y=-7/16
    [x]=11.0101;[y]=11.1001;
    [x]+[y]=10.1110;(10不同,负溢出)

浮点运算

加法与减法运算

  • 对阶
  • 尾数求和
  • 规格化
    左规:尾数的第一数值为与符号位相同需左规,尾数左移一位,阶码减1.
    右规:符号位不相同需右规,尾数右移一位,阶码加1.
  • 舍入
  • 溢出

例1:
x=0.1101 x 201 ,y=(-0.1010) x 211,求x+y。
[x]=00,01;00.1101
[y]=00,11;11.0110

  • 小阶向大阶看齐
    显然,要将x变为211 ,每右移一位,阶码加1
    [x]=00,11;00.0011

  • 尾数求和
    00.0011+11.0110=11.1001
    即[x+y]=00,11;11.1001

  • 规格化
    左规:
    [x+y]=00,10;11.0010

    故x+y=(-0.1110) x 210

例2:
x=0.1101 x 210 ,y=0.1011 x 201,求x+y。
[x]=00,10;00.1101
[y]=00,01;11.1011

  • 小阶向大阶看齐
    显然,要将y变为210 ,每右移一位,阶码加1
    [y]=00,10;00.0101

  • 尾数求和
    00.1101+00.0101=01.0010
    即[x+y]=00,10;01.0010

  • 规格化
    右规:
    [x+y]=00,11;00.1001

    故x+y=0.1001 x 211

返回顶部

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值