- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 当x有奇数个1时返回1,retrun 1 when x contains an odd number of 1s
看到了这一个练习题,写一个函数,要求当x有奇数个1时返回1,否则返回0,只能用12个以内的逻辑、算术和位运算 /* retrun 1 when x contains an odd number of 1s;0 otherwise Assume w=32*/看到这道题时,想到笨一点的方法就是一个个去数吧,if(x&0x1==0){ k++;} 循环后将k取模得到...
2017-08-30 21:30:23
3216
原创 《深入理解计算机系统》(原书第三版)家庭作业第三章(3.69)解答
根据c代码和对应生成的汇编代码推断:A.CNT的值。B.结构a_struct的完整声明,假设这个结构只有字段idx和x,并且都为有符号值。typedef struct{int first; //0+4a_struct a[CNT]; //8+280int last; //288+4}b_structvoid test(long i,b_struct *bp){
2017-08-30 14:41:25
3296
原创 NTP的时间戳的LSW转换为unix的usec
关于NTP协议的介绍就不啰嗦了,网上已经有很多介绍的文章这次写的是NTP 时间戳里面的LSW字段到unix的usec的转换NTP的时间戳有两个32位数分别是:MSW和LSW,MSW以秒为单位LSW以232ps(皮秒)为单位 要进行转换,首先得知道两个数值之间的关系!!!1LSW=232ps(皮秒)是怎样来的?
2017-08-29 23:56:28
2677
1
原创 二进制除法转乘法原理
为了加快运行速度,编译器会将一些除法运算转化成乘法运算。其中一个转换x/k的方法是,先将k变成1/k 的小数形式,再将1/k 左移N位得到一个数b以后每计算 x/k 时,就先计算 x∗b的乘积,再将乘积右移N位得到结果,这样就把耗时的除法运算变成了一个乘法和一个右移运算。原理:下面是一段测试C代码以及编译器生成的汇编代码:计算变量
2017-08-29 21:21:43
7788
原创 《深入理解计算机系统》(原书第三版)家庭作业第三章(3.68)解答
A和B是通过#define 定义的常数,求A和B的值从setVal的C代码和汇编代码对比可知:t 在str2 的偏移量为8 , u在str2 的偏移量为32 , y 在 str1的偏移量为 184 结构体str2 和 str1 类型的最长单位是long ,因此它们都是 8位对齐。有下列的结构图和分析:最
2017-08-28 01:37:59
725
原创 《深入理解计算机系统》(原书第三版)家庭作业第三章(3.63)解答
原题目:**3.63 伪代码分析:x rdi ;n rsin=n-0x3c(60);if(n>5){-->4005c3}else{goto:*(8n+0x4006f8)n=0 : 0x4006f8 -->0x4005a1n=1 : 0x400700 -->0x4005c3n=2 : 0x400708 -->0x4005a1n=3 : 0x40071
2017-08-27 11:57:50
4253
原创 《深入理解计算机系统》(原书第三版)家庭作业第三章(3.59)解答
**3.59 下面代码计算两个64位有符号值x和y的128位乘积,并将结果存储在内存中; typedef __int128 int128_t; void store_prod(int128_t *dest, int64_t x, int64_t y{ *dest = x *(int128_t)y; }解析:y in %rdx
2017-08-26 21:47:16
2347
6
原创 程序控制过程机器级表示(访问条件码)-《深入理解计算机系统》笔记
笔记(程序控制过程机器级表示):粤语残片上面的字幕是要从右往左读的,跟现代的书写习惯不一致,因此看起来很不习惯。其实很多事物都有类似的情况,之所以不习惯是因为你把它读反了。就像用条件码去判断两个数(a和b)的大小,为什么是用(SF^OF)去判断?为什么不是用(SF&OF)不是(SF|OF)等?从因为“(SF^OF)”所以是“a条件码:除了整数寄存器外,C
2017-08-15 01:08:45
929
Android开发资料
2013-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人