
深入理解计算机系统
ciqingloveless
这个作者很懒,什么都没留下…
展开
-
排序算法总结
时间复杂度额外空间复杂度稳定性选择排序O(N2)O(N^2)O(N2)O(1)O(1)O(1)无冒泡排序O(N2)O(N^2)O(N2)O(1)O(1)O(1)有插入排序O(N2)O(N^2)O(N2)O(1)O(1)O(1)有归并排序O(N×logN)O(N\times{\log{N}})O(N×logN)O(N)O(N)O(N)有随机快排O(N×logN)O(N\times{\log{N}})O(N×logN)O(logN...原创 2020-11-04 10:51:09 · 176 阅读 · 0 评论 -
深入理解计算机系统 练习题2.11 答案与分析
可执行代码#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;void inplace_swap(int *x, int *y) { *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y;}vo...原创 2018-09-13 16:58:43 · 1650 阅读 · 0 评论 -
深入理解计算机系统 练习题2.21 答案与分析
先上结果 先记住一个值2322322^{32}为4294967296,后面计算都基于这个值,因为是32位机器 表达式 类型 求值 -2147483647-1==2147483648U 无符号 1 -2147483647-1<2147482647 有符号 1 -2147483647-1U < 2147483647 无符号...原创 2018-09-14 17:26:30 · 2608 阅读 · 0 评论 -
深入理解计算机系统 练习题2.38 答案与分析
就像我们将在第三章中看到的那样,LEA指令能够执行形如(a<<k)+b的计算,这里k等于0、1、2或3,而b等于0或者某个程序值。编译器尝尝用这条指令来执行常熟因子乘法。考虑b等于0或者等于a、k为任意可能的值的情况,用一条LEA指令可以计算a的哪些倍数?当b=0,(a<<k)+b=a*2k2^k2k,而k等于0、1、2或3,所以计算结果为a,2a,4a,8a当b=1...原创 2018-09-25 15:55:59 · 386 阅读 · 3 评论 -
深入理解计算机系统 练习题2.40 答案与分析
K移位加法/减法表达式621(x &lt;&lt; 2) + (x&lt;&lt;1)3111(x &lt;&lt;5 ) - x-621(x &lt;&lt; 1) - (x &lt;&lt; 3)5522原创 2018-09-25 20:31:32 · 791 阅读 · 0 评论 -
深入理解计算机系统 2.4.2 IEEE浮点表示详细讲解
定义IEEE浮点标准用以下公式表示V=(−1)s∗M∗2EV = (-1)^s * M * 2^EV=(−1)s∗M∗2E符号(sign):s决定这书是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理 。尾数(significand):M是一个二进制小数,它的范围是1&amp;nbsp;2−ε1 ~ 2-\varepsilon1&amp;nbsp;2−ε,或者是0&amp;nbs...原创 2018-10-30 17:03:29 · 1424 阅读 · 2 评论 -
深入理解计算机系统寄存器寻址讲解
介绍我在网上找过相关材料,感觉讲解都不是很详细,所以我自己写一篇相关文章,为了自己记忆,也为了帮助别人解惑。寄存器寻址有以下几种模式,我按照书上用表格列出来类型格式操作数值名称立即数$ImmImmImmImmImmImm立即数寻址寄存器rar_araR[ra]R[r_a]R[ra]寄存器寻址存储器ImmImmImmM[Imm]M[Imm...原创 2018-11-16 11:12:16 · 7667 阅读 · 16 评论 -
深入理解计算机系统 习题3.4
题目假设变量sp和dp被声明为类型src_t *sp;dest_t *dp;这里src_t和dest_t是用typedef声明的数据类型。我们想使用适当的数据传送指令来实现下面的操作*dp = (dest_t) *sp;假设sp和dp的值分别存储在寄存器%rdi和%rsi中。对于表中的每个表项,给出实现指令数据传送的两条指令。其中第一条指令应该从内存中读数,做适当的转换,并设置寄存器%...原创 2018-11-21 16:45:22 · 3251 阅读 · 10 评论 -
深入理解计算机系统 练习题3.8 理解计算机二元操作
我讲解这道题的目的是为了让大家理解结果为什么是那样的,假如对基础知识不是特别了解的人,可能会对答案有疑问,但是答案并没有详细讲解为什么会得到哪些答案。这里推荐我写的另一篇博客,https://blog.youkuaiyun.com/ciqingloveless/article/details/84136002,这里详细讲述了寄存器寻址,后面有的内存我回省略。题目假设下面的值存放在指定的内存地址和寄存器中...原创 2018-11-22 14:37:21 · 4113 阅读 · 8 评论 -
深入理解计算机系统2.35练习题解答
有人问我练习题第一问没太理解,我觉得就是答案的公式推导不太清晰,我稍微推导一下这里主要讲解一下x∗y=v2w+ux*y=v2^w+ux∗y=v2w+u根据位模式转补码公式x=−xw−1∗2w−1+∑w−2i=0xi∗2ix = -x_{w-1}*2^{w-1}+\sum_{w-2}^{i=0}x_{i}*2^ix=−xw−1∗2w−1+∑w−2i=0xi∗2i所以x∗y=−x2w−1∗...原创 2019-01-07 15:04:11 · 1387 阅读 · 0 评论 -
深入理解计算机系统 练习题2.10 答案与分析
可执行代码#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;void inplace_swap(int *x,int *y) { *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; cout...原创 2018-09-13 16:05:14 · 835 阅读 · 0 评论 -
深入理解计算机系统 练习题2.9 答案与分析
A.一种颜色补是通过关掉打开的光源,且打开关闭的光源而形成的。那么上面列出的8种颜色的每一种的补是什么? 按照题意,需要对原有颜色按位取反,然后在进行比对 原颜色 代码 补码 补颜色 黑色 000 111 白色 蓝色 001 110 黄色 绿色 010 101 红绿色 蓝绿色 011 100 ...原创 2018-09-13 15:13:21 · 565 阅读 · 0 评论 -
深入理解计算机系统 练习题2.8 答案与分析
计算 结果 讲解 a [01101001] b [01010101] ~a [10010110] 按位取反 ~b [10101010] 按位取反 a&b [01000001] 按位与 只有两个都是为结构位是1,其余为0 a|b [01111101] 按位或,只要每一位有一...原创 2018-09-13 11:35:28 · 669 阅读 · 0 评论 -
深入理解计算机系统 练习题2.23 答案与分析
#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;int fun1(unsigned word) { return (int)((word << 24) >> 24);}int fun2(unsigned word) ...原创 2018-09-17 10:37:38 · 1935 阅读 · 0 评论 -
深入理解计算机系统 练习题2.25 答案与分析
#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;float sum_elements(float a[], unsigned length) { int i; float result = 0; cout << len...原创 2018-09-17 14:18:29 · 2048 阅读 · 0 评论 -
深入理解计算机系统 练习题2.26 答案与分析
测试代码#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;int strlonger(char *s, char *t) { return strlen(s) - strlen(t)>0;}int main() { char...原创 2018-09-17 15:07:45 · 1575 阅读 · 0 评论 -
深入理解计算机系统 练习题2.27 答案与分析
无符号数加法#include &lt;stdio.h&gt; #include "stdafx.h"#include &lt;iostream&gt;using namespace std;int uadd_ok(unsigned x,unsigned y) { cout &lt;&lt; x &lt;&lt; end原创 2018-09-17 15:51:43 · 668 阅读 · 0 评论 -
深入理解计算机系统 练习题2.31 答案与分析
测试代码#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;int uadd_ok(int x, int y) { int sum = x + y; cout << sum << endl; cout &l...原创 2018-09-17 16:54:01 · 658 阅读 · 0 评论 -
深入理解计算机系统 练习题2.32 答案与分析
错误示例#include <stdio.h> #include "stdafx.h"#include <iostream>using namespace std;int tadd_ok(int x, int y) { int sum = x + y; int neg_over = x < 0 && y < 0 ...原创 2018-09-17 18:36:42 · 1691 阅读 · 2 评论 -
深入理解计算机系统 练习题2.5 答案与分析
测试代码#include &lt;stdio.h&gt; #include "stdafx.h"#include &lt;iostream&gt;typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len) { size_t i; for (i = 0; i ...原创 2018-09-13 10:33:13 · 1512 阅读 · 2 评论 -
深入理解计算机系统 练习题2.6 答案与分析
A.写出这两个十六进制值的二进制表示 原值 二进制表示 0x00359141 00000000001101011001000101000001 0x4A564504 01001010010101100100010100000100这里要说的不多就是把每一个数字转换成16进制,没有什么好的办法就是背,或者找个工具 B.移动这两个二进制串的相对位置...原创 2018-09-13 10:48:15 · 828 阅读 · 0 评论 -
深入理解计算机系统 练习题2.7 答案与分析
测试代码#include <stdio.h> #include "stdafx.h"#include <iostream>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len) { size_t i; for (i = 0; i ...原创 2018-09-13 11:13:24 · 627 阅读 · 0 评论 -
深入理解计算机系统 图2.4 添加可执行main函数
#include <stdio.h> #include "stdafx.h"#include <iostream>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, size_t len) { size_t i; for (i = 0; i < l...原创 2018-09-12 20:17:42 · 175 阅读 · 0 评论