1. 程式人生 > >《C和指標》讀書筆記(4)

《C和指標》讀書筆記(4)

宣告:該讀書筆記摘抄自《C和指標》——Kenneth A.Reek (著)    徐波(譯)。為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。

一、關於位操作符

     1、對於有符號數的右移操作是邏輯移位還是算術移位取決於編譯器,並且此類程式是不可移植的;

     2、將某個整型值的第n位置1, value |= (1 << n); 清0, value &= ~(1 << n);   測試是否為1, value & (1 << n), 如果是第n位是1,結果為非零值;

二、getchar 函式的返回值是整型,而不是char型,這主要是為了處理EOF檔案結束符(即-1),如:

       char        c;

      while  (EOF  !=   (c = getchar()))  {

                       ;

      }

      當這段程式碼執行在使用無符號字符集(即char的範圍是0~255)的機器上,這段程式碼將是個死迴圈,因為c的值永遠不可能是EOF(即-1);

     即使這段程式碼執行在了使用有符號字符集的機器上,也只有在讀取了值為\377的位元組後,才會終止迴圈。\377為轉義序列,代表一個八進位制的數,對應無符號char為255,已經超出了有符號char所能表示的+127的正上限,此時會發生截短,然後整型提升,這樣得到的值剛好和EOF一樣。

      改正:應當將變數c宣告為int型別。

三、sizeof  運算子,在編譯期間求值,它的運算元既可以是表示式(常常是單個變數),也可以是括號加上型別名,例如 sizeof( int )      sizeof ( x )    sizeof    x        都是合法的。另外要注意,sizeof計算表示式的長度時不會對錶達式進行求值,例如:sizeof ( a = b + 1) ,括號裡面並沒有向變數a賦值。

四、靈活邏輯運算子(利用&&、|| 最短求值 )、運用條件運算子、逗號表示式改善程式結構。

 以上為第五章“運算子和表示式”摘抄總結,未完待續。。。