计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理(2.1-2.2)

目录

2.1 信息存储

2.1.1 十六进制表示法

2.1.2 字数据大小

2.1.3 寻址和字节顺序

2.1.4 表示字符串

2.1.5 表示代码

2.1.6 布尔代数简介

2.1.7 C语言中的位级运算

2.1.8 C语言的逻辑运算

2.1.9 C语言中的移位运算

2.2 整数表示

2.2.1 整型数据类型

2.2.2 无符号数的编码

2.2.3 补码编码

2.2.4 有符号数和无符号数之间的转换

2.2.5 C语言中的有符号数与无符号数

2.2.6 扩展一个数字的位表示

2.2.7 截断数字


 

2.1 信息存储

字节:

  • 最小可寻址存储单位
  • 8位的块
  • 非单独的位
  • 由唯一数字标识,称为“地址”

对于跨越多字节的程序对象必须建立两个规则:

  • 这个对象的地址是什么?
  • 如何在存储器中排列这些字节?

2.1.1 十六进制表示法

2.1.2 字数据大小

 

 

 

 

 

 

 

 

计算机有字长,指明指针数据的标称大小

 

 

 

 

2.1.3 寻址和字节顺序

 

 

 

 

 

 

 

 

 

假设:

 

排列顺序结果可能:

  0x100   0x101   0x102   0x103
  01         23        45         67        大端法
  67    
    45        23         01        小端法

  • 变量x类型为int
  • 位于地址0x100处
  • 16进制为0x01234567
  • 地址范围:0x100~0x103字节
  • 小端法:最低有效字节在最前面
  • 大端法:最高有效字节在最前面

 

 

 

 

2.1.4 表示字符串

2.1.5 表示代码

2.1.6 布尔代数简介

2.1.7 C语言中的位级运算

  • C语言中的位运算: &,  |,  ~,  ^
    • 适用于任何整型数据类型:long, int, short, char, unsigned
    • 操作数视为位向量
    • 参数位运算

 

 

 

 

 

 

 

 

 

2.1.8 C语言的逻辑运算

2.1.9 C语言中的移位运算

 

 


2.2 整数表示

2.2.1 整型数据类型

2.2.2 无符号数的编码

  • 符号位
    • 对于补码(2’s complement), 最高位表示符号
    • 0 表示非负数( != 正数),1 表示负数

2.2.3 补码编码

  • 补码(正数取反加1)
    •   x =      15213:       00111011    01101101
    •   y =     -15213:      11000100    10010011

 

 

 

 

 

 

 

 

无符号数与有符号数编码的值

  • 相同
    • 非负数值的编码相同
  • 单值性
    • 每个位模式对应一个唯一的整数值
    • 每个可描述整数有一个唯一编码
  •  Þ 有逆映射
    • U2B(x)  =  B2U-1(x)
      • 无符号整数的位模式
    • T2B(x)  =  B2T-1(x)
      • 补码的位模式

 

 

 

 

2.2.4 有符号数和无符号数之间的转换

 

 

 

 

 

 

 

 

 

 

 

 

  • 有符号数和无符号数转换规则:
    • 位模式不变
    • 数值可能改变
    • 按不同编码规则重新解读

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.5 C语言中的有符号数与无符号数

 

 

 

 

 

  • 常量
    • 数字默认有符号数
    • 无符号数用后缀 “U”
      • 0U, 4294967259U
  • 类型转换
    • 显示的强制类型转换
      • int tx, ty;
      • unsigned ux, uy;
      • tx = (int) ux;
      • uy = (unsigned) ty;
    • 隐式的类型转换(赋值、函数调用等情况下发生)
      • tx = ux;
      • uy = ty;

 

  • 类型转换混淆:表达式计算
    • 表达式中有符号和无符号数混用时:
      • 有符号数隐式转换为无符号数
      • 包括比较运算符 <, >, ==, <=, >=
    • 例如W = 32:
      • TMIN = -2,147,483,648
      • TMAX =  2,147,483,647

 

 

 

2.2.6 扩展一个数字的位表示

 

 

 

 

 

 

 

  • 整数类型向整数类型转换时,C自动进行符号扩展

 

  • 扩展 (例如从short int int的转换)
    • 无符号数: 填充0
    • 有符号数:符号扩展
    • 结果都是明确的预期值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.7 截断数字

  • 截断 (例如从unsigned 到unsigned short的转换)
    • 无论/符号数:多出的位(高位)均被截断
    • 结果重新解读
    • 无符号数: 相当于求模运算
    • 有符号数: 与求模运算相似
    • 对于小整数,结果是明确(正确)的预期值

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值