csapp 信息的表示和处理

信息的表示和处理

信息的存储

  • 数据按字节的形式存储,实际运算时按字(数据总线的条数)进行存取。
  • 大端指的是数据的低字节部分存储在高地址
  • 小端指的是数据的高字节部分存储在低地址
    csapp 信息的表示和处理
  • 对于0x01234567 大端模式的低地址存储的值是【0x12】,小端模式的搞地质存储的值是【0x67】
  • C++测试大小端的简单方法:

csapp 信息的表示和处理

  • C语言的按位操作和逻辑运算不同,逻辑运算的结果只有0和1
  • C语言的移位操作
无符号数 +正数 有符号数(负数)
左移 向左移动,末尾补0 向左移动,末尾补0
右移 向右移动,高位补0 向右移动,高位补1

数值的表示

  • 有符号数用补码表示,无符号数没有符号位,直接表示数值
  • 补码的最高位(第w位)的权重为 - 2w,无符号的权重为 2w

正数的补码=原码 =反码【正数的补码最高位权重为0*(-2w)=0】
[+5]原/反/补=【0101】(此处0是符号位表示正数)
负数的补码=反码(=原码每位取反)+1
[-5]=【1011】(此处1是符号位表示负数)
[-5]=【1010】(此处1是符号位表示负数)
[-5]=【1101】(把+5的符号位变反)
csapp 信息的表示和处理

  • 有符号数与无符号数的最大最小值
    csapp 信息的表示和处理
    无符号数的最小值永远为0,无符号数为【1000…0】
    csapp 信息的表示和处理

  • 有符号数与无符号数的扩充位

有符号数和正数都是高位扩充0
负数高位扩充1

  • 有符号数与无符号数的截断

无符号数截断k位,相当于原数mod2k,去掉后面k位即可
有符号数截断k位,相当于原数mod2k,去掉后面k位,得到的数进行有符号的表示

  • 有符号数与无符号数的转换

有符号数转无符号数时,不需变换二进制,只需要原来的有符号数的二进制表示的数的最高位权重变为2w,相当于有符号为负数,整个数值加上2w
无符号数转有符号数时,符号位为1的数,整个数值减去2w

  • 特别-1的补码表示是全1,全1也是无符号数的最大值

整数的运算

1.无符号数相加的溢出

csapp 信息的表示和处理

example:
csapp 信息的表示和处理

2.有符号数相加的溢出

csapp 信息的表示和处理
csapp 信息的表示和处理
csapp 信息的表示和处理

3.减法

y-(x) = y+(-x)

无符号数的减法,利用溢出求相反数

csapp 信息的表示和处理

有符号数的减法

csapp 信息的表示和处理

乘法(可用向左移位和加减法代替)

csapp 信息的表示和处理

浮点数的表示

1.规格化数

csapp 信息的表示和处理

csapp 信息的表示和处理
csapp 信息的表示和处理
csapp 信息的表示和处理

2.非规格化数

E=0 ===》s为0表示+0,s为1表示负0

3.无穷大的数

E=255,尾数为0 ====》s为0表示正无穷大,s为1表示负无穷小
E=255,尾数不为0 ===》不是一个数

4、int类型转float类型

csapp 信息的表示和处理

舍入方法

csapp 信息的表示和处理
csapp 信息的表示和处理

向零舍入:直接舍弃小数部分

上一篇:C# 委托事件, 发布者订阅者模式简单的demo


下一篇:CSAPP深入理解计算机系统实验代码