IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 《深入理解计算机系统》阅读笔记(持续更新) -> 正文阅读

[C++知识库]《深入理解计算机系统》阅读笔记(持续更新)

第二章

2.1 信息存储

2.1.3 寻址和字节顺序

· 字长决定系统的虚拟地址空间最大大小

· 多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址

· 最高有效位 & 最高有效字节

· 大端法:最高有效字节放在最前面

· 当前程序计数器的值即为下一条将要执行的指令的地址

#include<stdio.h>
typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start,size_t len){
    size_t i;
    for(i=0;i<len;i++)
        printf(" %.2x",start[i]);
    printf("\n");
}

? ? ? ? 函数功能:打印程序输入对象的字节表示,以16进制方式输出,变量len确定对象使用的字节数

· typedef int *int_pointer;

? ? ? ? 上述代码将int_pointer定义为一个指向int的指针

· 格式化输出规定: %d十进制整数 ? ?%f浮点数 ? ?%c字符 ?%u无符号数 ??? %x十六进制

2.1.4 表示字符串

· c语言中字符串被编码为一个以null字符结尾的字符数组,终止字符的16进制表示为0x00

2.1.5 表示代码

· 不同的操作系统有不同的编码规则,因此二进制代码不兼容

2.1.7?位级运算

~    非
&    和
|    或
^    异或

2.1.8 逻辑运算

&&    和
||    或
!     非

? ? ? ? 逻辑运算与位级运算不同的地方:对于逻辑运算,如果对第一个参数求值就能确定表达式的结果,逻辑运算符就不会对第二个参数求值

2.1.9 移位运算

? ? ? ? 有符号数——算数右移,逻辑左移

? ? ? ? 无符号数——逻辑右移,逻辑左移

2.2 整数表示

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

· 强制类型转换的结果:保持二进制位值不变,数值可能改变

· 有符号数到无符号数的隐式转换,会导致错误和漏洞

2.2.5 c语言中有符号数和无符号数

· 如果一个运算数有符号而另一个运算数无符号,则c语言会隐式的将有符号数转换为无符号

2.2.6 扩展一个数字的位表示

? ? ? ? 无符号——零扩展

? ? ? ? 有符号——符号扩展

2.2.7 截断数字

? ? ? ? 截断无符号数:x‘=x mod 2^k,直接抹去前面若干位

? ? ? ? 截断有符号数:x'=B2T(x?mod?2^k),抹去前面若干位后,将最高位视为符号位? ? ? ??

2.3 ?整数运算

2.3.1 无符号运算

· 无符号加法计算步骤:1. 位运算 ? ? ? ?2. 截断为k位 ? ? ? ?3. 视为无符号数

· 算数溢出:完整的整数运算结果不能放到规定的数据类型字长限制中。

· 无符号求反

-_{u}^{v}\textrm{x}=\left\{\begin{matrix} x, x=0& \\ 2^{_{w}}-x, x>0& \end{matrix}\right.

2.3.2 补码运算

· 补码加法:1. 位运算 ? ? ? ?2.截断 ? ? ? ?3.视为补码

· 补码加法溢出:正溢出/正常/负溢出

· 两个数的补码加法和无符号加法有相同的位级表现

· 检测补码加法中的溢出:

? ? ? ? 1?? 正溢出:x>0 && y>0 && x+y<=0

? ? ? ? 2?? 负溢出:x<0 && y<=0 && x+y>=0

· 补码的非

-_{t}^{w}\textrm{x}=\left\{\begin{matrix} TMinw, x=TMinw\\ -x ,x>TMinw \end{matrix}\right.

· 快速求补码的非的方法:对x的每一位取补,再对结果加1

2.3.4 无符号乘法

x*^{_{u}^{w}} y= (x\cdot y)mod 2^{w}

2.3.5 补码乘法

????????x*_{u}^{w}y=U2T(x\cdot y) mode 2^{w}

? ? ? ? 无符号和补码乘法的位级表示是等价的

2.3.6 乘以常数

· 与2的幂相乘的无符号乘法

x*_{w}^{u}2^{w}== x<<w

????????高w位即丢弃,低位用0补齐

· 与2的幂相乘的补码长乘法

x*_{w}^{t}2^{w}==B2T(x<<w)

? ? ? ? 乘法的优化1:

x*14=(x<<3)+(x<<2)+(x<<1)

? ? ? ? ?乘法的优化2:

? ? ? ? 形式A:

x*14=(x<<3)+(x<<2)+(x<<1)

? ? ? ? 形式B:

? ? ? ??x*14=(x<<4)-(x<<1)???????

2.3.7 除以2的k次幂

? ? ? ? 无符号和补码分别使用逻辑移位和算数移位达成目的

· 除以2的幂的无符号除法

? ? ? ? x>>k?

· 除以2的幂的补码除法+向下取整

? ? ? ? x>>k

· 除以2的幂的补码除法+向上取整

? ? ? ? (x+(1<<k)-1)>>k

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:15:23  更:2021-10-12 23:16:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:16:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码