《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賦值。
四、靈活邏輯運算子(利用&&、|| 最短求值 )、運用條件運算子、逗號表示式改善程式結構。
以上為第五章“運算子和表示式”摘抄總結,未完待續。。。