农民工学CSAPP题目解析-前篇题目解答以及答疑总结

简介: 农民工学CSAPP题目解析-前篇题目解答以及答疑总结

一、信息的表示和处理


1. 掩码运算


x&0xFF 就是与上很多1,来挑选位


为了可移植性,我们得到0x1111全一都用~0x0取反操作


2. c语言移位运算


一般:

有符号数  无符号数
算数移动-右移补符号位 逻辑移动-补0


x 》》 4(算数右移)


0110 0110 ------- 1111 0110


3. 整形数据类型


1668323209867.jpg

速查表:


char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65536 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295 
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

1668323244077.jpg

1668323311595.jpg

/* There is some amount of overlap with <sys/types.h> as known by inet code */
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char                int8_t;
typedef short int                int16_t;
typedef int                        int32_t;
# if __WORDSIZE == 64
typedef long int                int64_t;
# else
__extension__
typedef long long int                int64_t;
# endif
#endif


4. size_t 计数


size_t主要用于计数,他就是一个unsinged int的重定义. 如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数。

1668323325053.jpg


size_t x;

1668323337950.jpg



5. 重要的数字表示:UMax-无符号数最大值 TMin-补码最小值


1668323348611.jpg

int32_t a = 12;
printf("%d", a );
system("pause");


6. 带格式打印


1668323369166.jpg

http://eleaction01.spaces.eepw.com.cn/articles/article/item/245365


7.CSAPP 练习题 2.25 -- 关于无符号数 -1 的不曾预料到的意外结果


#include <stdio.h>
float sum_elements(float a[], unsigned length);
int main(int argc, const char *argv[])
{
  float a[] = {1.0,2.0,3.3,4.3,5.6,6.1,7.8,8.5,9.0,10.1};
  sum_elements(a, 0);
  return 0;
}
float sum_elements(float a[], unsigned length){
  int i;
  float result = 0;
  for(i=0; i<= length-1; i++)
  result +=a[i];
  return result;
}


这里 i< length -1 , 因为length是无符号数,所以 当length = 0 , 0-1 = -1 , -1 的无符号数表示 是0xFFFFFFFFF,所以,i会一直增值往 这个最大的无符号数奔去……


测试结果:内存访问越界


--很容易发生访问其他不让访问地区的漏洞

1668323391779.jpg


8. XDR库中的安全漏洞

1668323409618.jpg

1668323419362.jpg

1668323430164.jpg



9. 浮点数带来的问题


浮点运算的不精确性能够产生灾难性的后果。1991年2月25日,在第 一次海湾战争期间,沙特阿拉伯的达摩地区设置的美国爱国者导弹,拦截伊拉克的飞 毛腿导弹失败。飞毛腿导弹击中了美国的一个兵营,造成28名士兵死亡。美国总审 .计局(GAO)对失败原因做了详细的分析[76],并且确定底层的原因在于一个数字计 _算不精确。在这个练习中,你将重现总审计局分析的一部分。 爱国者导弹系统中含有一个内置的时钟,其实现类似一个计数器,每0.1秒就加1。为了以秒为单位来确定时间,程序将用一个24位的近似于1/10的二进制小数值 来乘以这个计数器的值。特别地,1/10的二进制表达式是一个无穷序列0. 000110011 [0011]…2,其中,方括号里的部分是无限重复的。程序用值x来近似地表示0. 1,x只考虑这个序列的二进制小数点右边的前23位:x = 0. 00011001100110011001100。


A. 0.1-x的二进制表示是什么?


B. 0.1-x的近似的十进制值是多少?


C. 当系统初始启动时,时钟从0开始,并且一直保持计数。在这个例子中,系统已经运行了大约100个小时。程序计算出的时间和实际的时间之差为多少?


D. 系统根据一枚来袭导弹的速率和它最后被雷达侦测到的时间,来预测它将在哪里出现。假定飞毛腿的速率大约是2000米每秒,对它的预测偏差了多少?



通过一次读取时钟得到的绝对时间中的轻微错误,通常不会影响跟踪的计算。相反,它应该依赖于两次连续的读取之间的相对时间。问题是爱国者导弹的软件已经升级,可以使用更精确的函数来读取时间,但不是所有的函数调用都用新的代码替换了。结果就是,跟踪软件一次读取用的是精确的时间,而另一次读取用的是不精确的时间。


解答:

在大多数情况中,浮点数的有限精度不是主要的问题,因为计算的相对误差仍然是相当低的。然而在这个例子中,系统对于绝对误差是很敏感的。


A. 我们可以看到0.1-x的二进制表示为:


0.000000000000000000000001100[1100]…2


B. 把这个表示与1/10的二进制表示进行比较,我们可以看到这就是2-20X(1/10),也就是大约9.54X10-8。


C. 9. 54X10'8 X100X60X60X10约等于0. 343秒。


D.0. 343X2000约等于687米。


相关文章
|
1月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
8月前
|
存储 编译器 C语言
数组、指针练习题及解析(含笔试题目讲解)其一(上)
数组、指针练习题及解析(含笔试题目讲解)其一
45 0
|
9月前
|
SQL 缓存 关系型数据库
OBCP题目及解析
OBCP题目及解析
687 0
|
11天前
|
SQL 算法 数据可视化
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
|
14天前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
13 1
|
14天前
|
存储
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
10 0
|
1月前
|
C语言 C++
C语言:指针运算笔试题解析(包括令人费解的指针题目)
C语言:指针运算笔试题解析(包括令人费解的指针题目)
|
1月前
|
数据采集 安全 API
阿里云大学考试python中级题目及解析-python高级
阿里云大学考试python中级题目及解析-python高级
22 0
|
1月前
|
存储 SQL 缓存
阿里云大学考试python中级题目及解析-python中级
阿里云大学考试python中级题目及解析-python中级
34 0
|
1月前
|
XML Java 开发工具
阿里云大学考试Java高级题目及解析-java高级
阿里云大学考试Java高级题目及解析-java高级
13 0

热门文章

最新文章

推荐镜像

更多