zoukankan      html  css  js  c++  java
  • 【CSAPP】二、信息的表示和处理

    三种重要的数字表示:无符号 、 补码 、 浮点数。

    【一】信息存储

    最小单位是字节, 在操作系统层面,只需要关注地址。系统将存储器空间划分为更可管理的单元,存放不同的程序对象(程序数据、指令、控制信息)

    1、16进制表示法:用两个16进制字符表示一个字节,00 - FF。 练习:16进制、10进制、2进制的相互转换。

    2、字: 字长决定虚拟地址空间的最大大小。32位计算机虚拟地址空间为 2^32个,即4GB

    3、数据大小:整数short2/int4/long一字/longlong8,浮点数float4/double8, char1, char *一字

    4、寻址和字节顺序:多字节对象的规则:地址+如何排列。

    小端法:前面的地址存放小的位,后面的地址存放大的位、大端法相反

    可能用到的场景:1、网络传输二进制数据。2、反汇编:从指令字节级表示到汇编程序 3、强制类型转换

    5、表示字符串:结尾为0x00(null, ascii码为0),文本数据比二进制数据平台独立性更好

    6、表示代码:二进制编码不兼容。

    7、c中位运算:~ | & ^,常见用法:自己与自己做异或,得到的是自身。掩码运算。

    8、c中逻辑运算:&& || !,

    9、c中移位运算:左移 << 右移:

    逻辑右移:左端补0

    算术右移:左端补最高位,

    无符号数据是逻辑右移,有符号数据,算数右移。

    【整数表示】

    有符号数第一位是负的 2^(n-1),

    有符号和无符号的切换:

     

    c中有符号数和无符号数运算,有符号数自动转换为无符号数!

    这一点很坑,最好的解决方法是永远不用无符号数。

    扩展数字的位表示:无符号零扩展,有符号符号扩展(类似逻辑右移)

    【整数运算】

     1、无符号加法:

    2、有符号加法:

    3、补码的非

    4、无符号乘法

    5、补码乘法

    高位不一致,低位是相同处理方式的。

    6、乘以常数:乘法运算通常需要10个以上时钟周期,但是乘以常数可以通过移位和加法运算来代替。

    例如:14 = 2 + 2^2 + 2^3,那么x*14 = (x << 3) + (x << 2) + (x<<1)

    7、除以2的幂:逻辑右移、算术右移 + 偏置(之后再看)

    【浮点数】

    IEEE标准

    1、二进制小数:与十进制小数机制类似

    2、IEEE浮点表示:sign + exp + frac:

    exp: 无符号数 - 偏置量 (偏置量为 2^(k-1) -1 )

    float: 1 + 8 + 23

    double: 1 + 11 + 52

    3、舍入与浮点运算(待填坑)

  • 相关阅读:
    子库存安全性控制
    检查装配件属性
    检查加工费是否有父件
    检查委外货位
    只允许操作外协任务
    检查是否存在工艺路线
    不能取组织ID
    加宽任务号宽度
    采购订单供应商地点必输
    只显示标准采购订单
  • 原文地址:https://www.cnblogs.com/yesuuu/p/6928638.html
Copyright © 2011-2022 走看看