1、高優先順序的操作符要比低優先順序的結合得更緊密。
2、某些算術表示式的求解結果未定義,其中一部分由數學特性引起,例如除零操作;其他則歸咎於計算機特性。個人理解,計算機特性是指計算機的位(32位/64位)。
3、在解除法(/)和求模(%)時,如果兩個運算元中只有乙個運算元為負數,這兩種操作的結果取決於機器:求模結果的符號要取決於機器,除法操作的值則是負數(或零)。
//習題5.7
#include "stdafx.h"
#include int main(int argc, char* argv)
return 0;
}
//習題5.8
if(a>b && b>c && c>d)
4、對於位操作符,由於系統不能確保如何處理其運算元的符號位,所以強烈建議使用unsigned整型運算元。
5、一般來說,標準庫提供的bitset操作更直接、更容易閱讀和書寫、正確使用的可能性更高。而且,bitset物件的大小不受unsigned數的位數限制。通常來說,bitset優於整型資料的低階直接位操作。
這段話的意思就是說,當要進行位操作的時候,最好使用bitset型別。
#include using std::bitset;
int main(int argc, char* argv)
//習題5.9
unsigned long ul1=3,ul2=7;
unsigned long result1 = ul1 & ul2;
unsigned long result2 = ul1 && ul2;
unsigned long result3 = ul1 | ul2;
unsigned long result4 = ul1 || ul2;
cout << result1 << endl
<< result2 << endl
<< result3 << endl
<< result4 << endl;
執行結果為:
//習題5.10
bitset<30> bitset_quiz1; //bitset_quiz1的每一位都預設為0值
cout << bitset_quiz1[27] << endl;
cout << bitset_quiz1 << endl;
bitset_quiz1[27] = 1;
cout << bitset_quiz1[27] << endl;
cout << bitset_quiz1 << endl;
bitset_quiz1[27] = 0;
cout << bitset_quiz1[27] << endl;
cout << bitset_quiz1 << endl;
執行結果為:
//習題5.11
int i;
double d;
d=i=3.5;
cout << i << endl << d << endl;
i=d=3.5;
cout << i << endl << d << endl;
執行結果為:
6、只有在必要時才使用後置操作符。因為前置操作符需要做的工作更少。
vectorivec;
int cnt=10;
while(cnt > 0)
ivec.push_back(cnt--);//先返回cnt的值,然後cnt再減一
需要注意的是:解應用和自
增操作的組合。
vector::iterator iter = ivec.begin();
while(iter != ivec.end)
cout << *iter++ << endl;
/* 自增操作符的優先順序高於解引用,故*iter++等效於*(iter++)
*/
//習題5.18
vectorivec;
string str;
int i=10;
while(i > 0)
for(vector::iterator iter = ivec.begin(); iter != ivec.end();++iter)
for(vector::iterator it = ivec.begin(); it != ivec.end();++it)
//習題5.20
int i=0,j=0;
cin >> i;
cin >> j;
cout << (i < j ? i : j) << endl;
//習題5.21
vectorivec;
int value;
int i=10;
while (i)
for (vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
7、sizeof表示式是編譯時常量
sales_item item,*pitem;
cout << "sizeof(sales_item) is " <
string* pps = new string();
delete pps;
pps = null;
//習題5.30
vectorsvec(10);
vector*pvec1 = new vector(10);
//vector**pvec2 = new vector(10);//err
vector*pv1 = &svec;
vector*pv2 = pvec1;
//delete svec;//err
delete pvec1;
//delete pvec2;//err
delete pv1;//err
delete pv2;//err
9、顯式轉換
/ 強制型別轉換:
static_cast,dynamic_case,const_cast,reinterpret_cast
避免使用強制型別轉換!
c primer 筆記,第五章
case標籤必須是整型常量表示式 在case語句中,不允許跨過變數的初始化語句直接跳轉到該變數作用域內的另乙個位置 在範圍for語句中,預存了end 的值,一旦在序列中新增 刪除 元素,end函式的值就可能變得無效了 尋找處理 的過程域函式呼叫鏈剛好相反,是沿著程式的執行路徑逐層回退,直到找到適當型...
c primer學習筆記 第五章
別漏寫分號也別多寫分號,如果是空語句需要注釋。while iter svec.end 迴圈體時空語句 iter 遞增運算不屬於迴圈的一部分 復合語句 用花括號括起來的語句和宣告的序列,也稱作塊。乙個塊就是乙個作用域,在塊中引入的名字只能在塊內部及子塊中訪問。塊不以分號結束。else與離他最近尚未匹配...
C primer 第五章 表示式
1 和 均是 2和除以2.2 為什麼建議多使用前自增?因為前置操作需要做的工作更少,只需要加1返回結果就行。而後置操作則需要先儲存運算元原來的值,以便返回未加1之前的操作結果。對於int型物件和指標,編譯器可以優化掉這項額外工作。但是對於更多的複雜迭代器型別,這種額外的工作可能花費更大的代價。3 s...