chap2:信息的表示和处理

 

1、机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器(virtual memory);

      字长:指明整数和指针的标称大小(nominal size);

      虚拟地址由一个字长编码,即字长决定虚拟地址空间的大小;

      eg:字长为32位的机器,虚拟地址空间为:2^32Byte = 4GByte;

 

2、由于CPU的字节顺序有大端法(big-endian)和小端法(litter-endian)两种表示方法,所以二进制代码不适合移植;

      而用ASCII码表示的文本数据,字符不分高低字节,最前面的字符最低地址,所以文本数据比二进制数据具有更强的平台独立性;

      P28页的程序可以用来测试CPU大小端;

 

3、整数编码

     3.1 、无符号编码(binary to unsigned):对应C语言中的unsigned;

               补码编码(two‘s-complement):对应C中的有符号数;几乎所有的机器都是用补码来表示有符号数。

     3.2、 有符号数和无符号数的转换

               有符号-->无符号 : 当x>=0时, T2U(x) = x ; 当x<0时,T2U(x) = x + 2^w ;其中w为数据类型的二进制位数;

               无符号-->有符号:  当u<2^(w-1)时,U2T(u) = u;当u>=2^(w-1)时,U2T(u)= u - 2^w ;其中w为数据类型的二进制位数

     3.3    C中,当执行一个运算数时,如果它的一个运算符是有符号另一个是无符号,那么C隐式的将有符号转换为无符号,并假设两个数都为非负数;

              两个数相减:eg: 1u - 2 = 1 + T2U(-2) ;得到的值并不直观;

 

4、整数运算     (其中w为数据类型的二进制位数)

     4.1 、无符号数相加:                 

              x+y = x +y,x+y<2^w;            

              x+y = x+y-2^w, 2^w<=x+y<2^(w+1);    //溢出

    4.2、补码相加:

          x+y = x+y-2^w ,    2^(w-1)<=x+y                            正溢出

          x+y = x+y,              - 2^(w-1)<=x+y<2^(w-1)          正常

          x+y = x+y+2^w,    x+y<-2^(w-1)                             负溢出

 

5、浮点数

     参考:http://blog.csdn.net/Microsues/archive/2011/03/01/6214646.aspx

      

     为什么打印:0.10000000000000001000

     原因:0.1即1/10,它无法由52位尾数精确的表示出来,所以发生了舍入。

     当float的23位尾数或者double的52为尾数无法精确的表示一个实数时,就会发生舍入。

     计算机中浮点的舍入:参考http://www.madongfly.cn/articles/floating_point_rounding.html

      

     P28页的程序(show_float() )可以用来打印浮点数在内存中实际的存储内容。

 

6、 C语言中: int,float,double之间的强制转换  P78

       见代码标注:

       

      打印结果:

     

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值