信息的表示和处理

信息存储

  • 字长与字节

  • 字长:每个计算机都有一个字长,对于字长为w位的机器而言,虚拟地址范围为0~ 2w1 ,32位的计算机虚拟地址空间被限定为4GB,当然操作系统有办法解决这一问题。

  • 字节:1byte=8bit。

  • 寻址与字节顺序。对于跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。

    • 对象的地址:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。如,int类型的变量x的地址为0x100,也就是说,地址表达式&x的值为0x100。那么,x的4个字节将被存储在存储器的0x100、0x101、0x102和0x103位置。
    • 字节的排列:排列表示一个对象的字节有两个通用的规则——大端法和小端法。假设变量x类型为int,位于地址0x100处,它的十六进制值为0x01234567。地址范围为0x100~0x103的字节,不同的方法排列顺序如下:
      这里写图片描述
  • 布尔代数简介
    这里写图片描述

  • 位级运算。位级运算就是按位进行布尔运算。这些运算能运用到任何“整型”的数据类型上,以下是一些对char数据类型表达式求值的例子:
    这里写图片描述

    • 掩码运算:位级运算的一个常见用法就是实现掩码运算。掩码是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。
      例如:掩码0xFF,x=0x89ABCDEF,x&0xFF将得到0x000000EF。
      表达式~0将生成一个全1的掩码,不管机器的字大小是多少。
  • 移位运算:
  • 逻辑右移:逻辑右移在左端补k个0。
  • 算数右移:算术右移在左端补k个最高有效位的值。

    例子:
    这里写图片描述

    对于无符号数据,右移必须是逻辑的。
    Java对于如何进行右移有明确的定义。表达式x>>k会将x算术右移k个位置,而x>>>k会对x做逻辑右移。

整数

  • 有符号数的表示

    • 原码表示:最高有效位是符号位,其余表示数值。如:
      3 = [00000011]
      -3 = [10000011]
    • 反码表示:最高有效位为负权,权重为 (2w11) ,其余同补码。如:
      3 = [00000011]
      -3 = [11111100]
      表现形式为按位取反,因为最高位相当于掩码。
    • 补码表示:最高有效位为负权,权重为 2w1 ,符号位设置为1时,表示负数,设置为0时,值为非负。如:
      3 = [00000011]
      -3 = [11111101]
      负数的补码是将其正数各位取反之后再加1。补码的范围是不对称的,TMin没有与之对应的正数。
      补码是计算机中最常见的有符号数表示方式。Java只支持有符号数,且使用补码运算。
  • 扩展数字

    • 零扩展:在开头补0。
    • 符号扩展:在开头添加最高有效位的副本。
  • 截断数字:直接丢弃高位。如:

    int x = 52191;          //1100111111000111
    short sx = (short)x;    //1100111111000111-->-12345
    int y = sx;             //-12345
  • 整数的运算:补码执行与无符号算术相同的位级实现。对于计算机来说可以按相同方式计算。

浮点数

  • 二进制的小数
    首先,我们看下小数的二进制表示。
    这里写图片描述

    这里写图片描述

  • 浮点数的表示
    IEEE浮点标准用 V=(1)s×2E×M 的形式来表示一个数:

    • 符号(sign):s决定这个数是负数(s=1)还是正数(s=0)。
    • 阶码(exponent):E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。
    • 尾数(significand):M是一个二进制小数。

    这里写图片描述
    在单精度浮点格式(float)中,s、exp和frac字段分别为1位、k = 8位和n = 23位,得到一个32位的表示。
    在双精度浮点格式(double)中,s、exp和frac字段分别为1位、k = 11位和n = 52位,得到一个64位的表示。

    根据exp的值,被编码的值可以分成三种不同的情况:
    这里写图片描述

    • 规格化的值:
      阶码的位表示为 ek1e1e0
      Bias=2k11 (单精度是127,双精度是1023)
      E=eBias
      小数字段frac描述为小数值 f ,其中0f<1,其二进制表示为 0.fn1f1f0
      M=1+f
    • 非规格化的值:
      当阶码域为全0时,所表示的数就是非规格化形式。
      E=1Bias
      M=f
    • 特殊值:
      当阶码域为全1时出现。当小数域全为0时,得到的值表示无穷,s = 0 时是+ ∞, s = 1时是- ∞。当我们把两个非常大的数相乘,或者除以零时,无穷能够表示溢出的结果。当小数域为非零时,结果值被称为“NaN”,就是“不是一个数”(Not a Number)的缩写。

    下图展示了假定的8位浮点格式的示例,其中有 k=4 的阶码位和 n=3 的小数位。偏置量 Bias=7 。规格化 E=e7 ,非规格化 E=6 。小数f的值的范围0, 18 ,…, 78
    这里写图片描述

    根据其表现形式,我们可以知道浮点数的表示范围及精度:
    这里写图片描述

  • 浮点数的舍入
    IEEE浮点格式定义了四种不同的舍入方式:
    这里写图片描述
    其中,向偶数舍入又称为最近舍入,这种方式与四舍五入唯一的不同就是对.5的舍入上,采用取偶数的方式。这样是为了避免统计偏差。默认的舍入方式为向偶数舍入。

  • 浮点数的运算
    浮点数运算通过一定的步骤,阶码与尾数貌似分别计算,具体暂不做了解。
    浮点运算只有有限的范围和精度,而且不遵守普遍的算术属性,比如结合性。使用的时候需要小心。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值