C++ Primer Plus 第三章復習題答案
3.6 復習題
以滿足各種開發(fā)的需要
?a. int i = 80; b. unsigned int i = 42110; long i = 3000000000;?
自動類型轉(zhuǎn)換
33L是long型 33 應該是int 型
等價
char i = 88;
cout<< i<<endl;
或者
int i = 88;
printf("%c",i);
將long賦值給double應該不會出現(xiàn)誤差,long long變量賦給double變量也會有舍入誤差。
?74? ?4?? 0?? 4.5? ?3
int?i =?(int)x1+(int)x2;
和
int i = int(x1+x2);
int?float?char char_32t double
魯班七號:
目的是為了滿足不同的計算需求。比如某小學某個班的學生數(shù)一般用 short 或者更精確地說是?unsigned short?即可(視具體的系統(tǒng)而定)、而某大學的師生個數(shù)一般用 int 或者更精確地說用 unsigned int 即可(視具體的系統(tǒng)而定)、而目前的中國人口數(shù)則需要用 long 或者更精確地說用 unsigned long、而目前的全球人口數(shù)則必須得使用 long long 或者更精確地說是 unsigned long long。更具體的可參見C/C++中各種類型int、long long、double表示范圍(最大最小值)。
a) short Value=80; b)?unsigned int?Value=42110; c) long long Value=3000000000; 或?unsigned long Value=3000000000;(建議使用這個)
C++本身并不能限制某個類型是否超出了它類型的范圍,但是可以用 limits 頭文件來看某種類型具體的范圍??蓞⒁妴栴} 1 中列出的連接。
常量 33L 實際上等價于 long Value=33,而常量 33 則等價于 int Value=33。
并不等價,得視系統(tǒng)而定,如果是使用ASCII碼的系統(tǒng)則是一樣的,但在某些系統(tǒng)中可能不一樣。并且常量 65 是 int 型的,而 ‘A’ 是 char 類型的。
char c = 88; cout << c << endl; cout.put(char(88))<<endl; cout << char(88) << endl; cout << (char)88 << endl;也就是說可以使用直接輸出,cout.put()函數(shù),或者強制轉(zhuǎn)換的方式。
這種情況也還是得視系統(tǒng)而定,也就是說取決于兩種類型的長度。如果 long 為 4 個字節(jié),則沒有損失,因為占 4 個字節(jié)的 long 的最大值為 2147483647,即有十位數(shù),而 double 提供了至少十三位有效數(shù)字,這種情況下沒有舍入誤差。但是 long long 類型提供了 19 位數(shù)字,這超過了 double 的有效位數(shù),故這種情況下有舍入誤差。
a) 74, b) 4, c) 0, d) 4.5, e) 3。
用C風格的代碼可以寫為:int Result=(int)x1+(int)x2; C++風格的則可以寫為:int Result=int(x1)+int(x2); 第二種情況類似,如下:int Result=(int)(x1+x2); 或者int Result=int(x1+x2);
a) int, b) float, c) char, d) char32_t, e) double。