zoukankan      html  css  js  c++  java
  • 计算机内数字的表示

    计算机中的数字有三种表示:无符号数、补码(带符号数)、浮点数

    信息的存储与寻址:计算机中将字节作为最小可寻址单元。而字节的排列顺序分大端法和小端法两种。大端法就是指将最高位放在最前面的存储方式,而小端法则是将最低位放在最前面的存储方式。

    C语言中的移位运算:

    • 左移:将x向左移动k位,丢弃最高的k位,并在右端补k个0
    • 逻辑右移:将x向右移k位后,在左端补k个0
    • 算术右移:将x向右移k位后,在左端补k个最高有效位的值。

    带符号数与无符号数的转换:

    带符号数->无符号数:若x<0,则返回x+2w

              若x>=0,则返回x

    无符号数->带符号数:若x<=TMax,则返回x

              若x>TMax,则返回x-2w

    整数的扩展:将一个较小类型的数,转换为较大类型

          无符号数,在数字的二进制表示的开头添0,这被称为零扩展

          带符号数,在数字的二进制表示的开头添加最高有效位的值符号扩

    整数的截断:将一个较大类型的数,转换为较小类型

          无符号数,先将数字的二进制表示直接转换成对应的无符号数,然后再用这个无符号数进行模2的k次方运算

          带符号数,先将数字的二进制表示直接转换成对应的无符号数,然后再用这个无符号数进行模2的k次方运算,然后经过模运算后得到的无符号转转换成带符号数。 

    无符号数加法:若x+y≥2w(溢出),则为x+y-2w;否则为x+y

           溢出判断:令s=x+y,当且仅当s<x或者s<y时,发生了溢出

    无符号数的非:若x=0,则为x,否则为2w-x

    带符号数加法:若x+y≥2w-1,则为x+y-2w(正溢出);若x+y<-2w-1,则为x+y+2w(负溢出);否则为x+y

           溢出判断:令s=x+y,当且仅当x>0,y>0,但s<=0时,发生了正溢出;当且仅当x<0,y<0,但s>=0时,发生了负溢出

    带符号数的非:若x=TMIN,则为x,否则为-x

    无符号数的乘法:(x*y) mod 2w

    带符号数的乘法:U2T((x*y) mod 2w)

    乘以2的幂:对于无符号数,C表达式x<<k产生x*2k的值

           对于带符号数,C表达式x<<k产生x*2k的值

    除以2的幂:无符号数处以2的幂,C表达式x>>k产生数值 floor( x/2k )

           带符号数除以2的幂,向下舍入,C表达式x>>k产生数值 floor( x/2k )

           带符号数除以2的幂,向上舍入,C表达式 ( x+(1<<k)-1)>>k 产生数值 ceil( x/2k )

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

        

    • 在规格化的表示中,exp段既不是全1,也不是全0。在这种情况下,阶码字段被解释为以偏置形式表示的有符号数。也就是说,阶码的值E=exp-Bias,其中exp是一个k位的无符号数,而Bias则等于2k-1-1(即最高位为0,其余位为1)。而尾数定义为M=1+frac。
    • 在非规格化的表示中,即阶码域位全0的形式,在这种情况下,阶码值是E=1-Bias,而尾数的值是M=frac,也就是小数字段的值。
    • 在特殊情况下,当阶码域位全1的时候,如果小数字段位全0则表示无穷大,如果小数字段不为全0则表示这不是一个数(NaN)

    浮点数的特殊值总结:

    以一个8位的浮点数为例:

     

    浮点数的舍入

    1. 向偶数舍入(即四舍五入)
    2. 向零舍入
    3. 向下舍入(相当于ceil函数)
    4. 向上舍入(相当于floor函数)

    C语言中的浮点数

    从int转换成float,数字不会溢出,但是可能被舍入。

    从int或float转换成double,因为double有更大的位数,所以能够保留精确的数值。

    从double转换成float,因为范围较小,所以值可能溢出成+∞或-∞。并且,由于精度较小,它还可能被舍入。

    从float或者都变了转换成int,值将会向零舍入。

  • 相关阅读:
    python基础-sort和sorted
    python基础-网络基础知识和网络编程
    python基础05--字符串常用方法
    python基础14-内置函数和匿名函数
    python基础13-迭代器和生成器
    python基础10——函数初识
    python基础09_文件操作
    python基础03——数据类型string
    python基础02—raw_input()和input()的区别
    R语言-变量聚类
  • 原文地址:https://www.cnblogs.com/TheFutureIsNow/p/10760060.html
Copyright © 2011-2022 走看看