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?vim

overflow是溢出的意思 point的意思是點,要點 。跟浮點數有什麼關係?!!!函數

根據個人推斷意思就是怎麼樣來解決2038年之後存儲的時間。然而課後答案給出的就是用64位來代替32位存儲該變量。spa

徹底吻合,看來這個翻譯的仍是有些問題。翻譯

 

 計算帶符號的整形數最大值的程序以下指針

 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\n",sum);
 9     return 0;
10 }
相關文章
相關標籤/搜索