• APUE第一章_课后习题


    /*
        未完成的:1.5 不过在下文中已经给出了解答。
    
    */
    1.1 在系统上查证,除根目录外,目录.和..是不同的
    ans:这个很容易,用vim打开.和..就可以看到区别。
    1.2 分析程序清单1-4的输出,说明进程ID为852和853的进程发生了什么情况。
    ans:进程852和853也在运行,但是无法知道他们在干什么。
    1.3 在1.7节中,perror的参数是用ISO C的属性const定义的,而strerror的整形参数则没有用此属性定义,为什么?
    ans: char *strerror(int errnum);
         void perror(const char *msg);
         如果msg是一个指针的话,则perror可能会改变指针所指的值,所以要用const来限制使之不能更改msg的值。
         strerror中的errnum是int值,strerror根本无法改变errnum的值。根据传参的标准。
    1.4 在附录B包含了出错记录函数log_doit,当调用该函数时,先保存了errno的值,为什么?
    ans:因为errno可能在函数里面执行的时候会改变,所以先保存下来,然后在需要输出的时候输出errno_save.
    1.5 若日历时间存放在带符号的32位整形数中,那么到哪一年它将溢出?可以用什么方法扩展浮点数?他们是否与已存在的应用相见兼容?
    ans:带符号的32位整形数,最大是2147483647,2147483647/(60*60*24*365)=68年。日历时间开始是1970年1月1日00:00:001970+68=2038年。
    1.6 若进程时间存放在带符号的32位整数中,而且每秒为100滴答,那么经过多少天后该时间值会溢出?
    ans: 带符号的32位整数中,最大值是2147483647.所以2147483647/(100*60*60*24)=248天

    中文版本是这么说的,但是在英文版本第二问是:What ways can be used to extend the overflow point?

    overflow是溢出的意思 point的意思是点,要点 。跟浮点数有什么关系?!!!

    根据我的推断意思就是怎么样来解决2038年以后存储的时间。然而课后答案给出的就是用64位来代替32位存储该变量。

    完全吻合,看来这个翻译的还是有些问题。

     计算带符号的整形数最大值的程序如下

     1 #include <stdio.h>
     2 int main(){
     3     int sum=0,haha=1;
     4     int i;
     5     for(i=0;i<=30;++i){
     6         sum+=haha<<i;
     7     }
     8     printf("%d
    ",sum);
     9     return 0;
    10 }
  • 相关阅读:
    STM32F407 开发环境搭建 程序下载 个人笔记
    用bootstrap_table实现html 表格翻页
    STM32F407 正点原子 资料网址记录
    C51 动态数码管 个人笔记
    C51 继电器 个人笔记
    谷歌浏览器截长图
    C51 原创电子琴 (蜂鸣器/计时器/中断/矩阵按键)
    从零自学Hadoop(01):认识Hadoop
    Centos修改DNS重启或者重启network服务后丢失问题处理
    初次体验VS2015正式版,安装详细过程。
  • 原文地址:https://www.cnblogs.com/symons1992/p/3536010.html
Copyright © 2020-2023  润新知