【正文】
am using namespace std。 void main() { int i=10, j=20, k。 k=(ij) ? i : j。 couti39。\t39。j39。\t39。kendl。 k=ij ? i+j : i3 ? j : i。 couti39。\t39。j39。\t39。kendl。 } 運(yùn)行結(jié)果 10 20 10 10 20 30 C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 語言程序設(shè)計(jì)教程第2章 數(shù)據(jù)類型與表達(dá)式 C++語言支持不同數(shù)據(jù)類型的數(shù)據(jù)之間的混合運(yùn)算。在對這樣的表達(dá)式求值時(shí),需要對其中的一些操作數(shù)進(jìn)行類型轉(zhuǎn)換。表達(dá)式中的類型轉(zhuǎn)換有兩種方式:自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換。 各種類型的高低順序如下所示: 類型轉(zhuǎn)換 f l o at i n t u n s i g n e d l o n g u n s i g n ed l o n g d o u b l e l o n g d o u b l e 低 類型 高 類型 bool char s h o r t (1) 若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證精度不降低,且運(yùn)算的結(jié)果(即表達(dá)式的值)的類型是運(yùn)算式的最終類型。 (2) 所有的浮點(diǎn)型運(yùn)算都是以雙精度進(jìn)行的,即使僅含 float單精度運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成 double型,再作運(yùn)算。 C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 語言程序設(shè)計(jì)教程第2章 數(shù)據(jù)類型與表達(dá)式 (3) bool、 char型和 short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成 int型。 (4) 邏輯運(yùn)算符要求參與運(yùn)算的操作數(shù)必須是 bool型,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動(dòng)將非 0數(shù)據(jù)轉(zhuǎn)換為 true, 0轉(zhuǎn)換為 false。 (5) 位運(yùn)算的操作數(shù)必須是整數(shù),當(dāng)二元位運(yùn)算的操作數(shù)是不同類型的整數(shù)時(shí),也會自動(dòng)進(jìn)行類型轉(zhuǎn)換。 (6) 在賦值運(yùn)算中,賦值號兩邊的數(shù)據(jù)類型不同時(shí),賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時(shí),可能丟失一部分?jǐn)?shù)據(jù),或降低精度。 float pi=。 //降低了精度 float f=。 //未降低精度 (7) 將 signed型的整型變成較長的 signed型的整型, unsigned型變成較長的整型時(shí),原值以及正負(fù)符號不變。 int a=2; long b=a; //b的值仍為 2 C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 語言程序設(shè)計(jì)教程第2章 數(shù)據(jù)類型與表達(dá)式 (8) 將 unsigned型和同長度的 signed型互變時(shí),其值根據(jù)自身所屬范圍發(fā)生適當(dāng)?shù)淖兓? unsigned short a=65535; short int b=a; // b的值變成 1 short int a=2; unsigned short b=a; // b的值變成 65534 假設(shè)定義變量為: char c=1。float f=。 表達(dá)式 ( 39。339。 = f ) + ( 39。B39。 c ) / + f的類型轉(zhuǎn)換圖如下: ( 39。 3 39。 = f ) + ( 39。 B 39。 c ) / 1. 0 + f d o u b le d o u b le i n t i n t b o o l (tr u e ) d o u b le(6 5 ) d o u b le(1 ) d o u b le d o u b le (6 9 . 1 ) C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 語言程序設(shè)計(jì)教程第2章 數(shù)據(jù)類型與表達(dá)式 2. 強(qiáng)制類型轉(zhuǎn)換 舊式的 C語言風(fēng)格的強(qiáng)制類型轉(zhuǎn)換的格式如下: 類型說明符 (表達(dá)式 ) 或 (類型說明符 ) 表達(dá)式 例如 : int(a+b) //將 a+b運(yùn)算的結(jié)果轉(zhuǎn)換成 int型 5/float(3) //將 3轉(zhuǎn)換成 float型 int a; float x=; a=(int)x; //取整數(shù)部分,舍棄小數(shù)部分 結(jié)果 a=8, x仍為 float型,其值仍為 。 采用強(qiáng)制類型轉(zhuǎn)換將高類型數(shù)據(jù)轉(zhuǎn)換為低類型數(shù)據(jù)時(shí),數(shù)據(jù)精度可能會受到損失。 C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 語言程序設(shè)計(jì)教程第2章 數(shù)據(jù)類型與表達(dá)式 標(biāo)準(zhǔn) C++強(qiáng)制類型轉(zhuǎn)換 : ? static_cast用于一般表達(dá)式的類型轉(zhuǎn)換。 例如: int a; float x=; a=static_cast int (x)。 //將變量 x的類型轉(zhuǎn)換成 int型。 static_cast 類型說明符 (表達(dá)式 ) reinterpret_cast類型說明符 (表達(dá)式 ) const_cast 類型說明符 (表達(dá)式 ) dynamic_cast 類型說明符 (表達(dá)式 ) ? reinterpret_cast用于非標(biāo)準(zhǔn)的指針數(shù)據(jù)類型轉(zhuǎn)換 , 如將 void *轉(zhuǎn)換成 char *。 ? const_cast將 const表達(dá)式轉(zhuǎn)換成非常量類型 , 常用于將限制 const成員函數(shù)的 const定義解除 。 ? dynamic_cast用于進(jìn)行對象指針的類型轉(zhuǎn)換 。 ?注意 : ? 進(jìn)行類型轉(zhuǎn)換,只是將值進(jìn)行了轉(zhuǎn)換,原變量的類型不變。 C++語言程序設(shè)計(jì)教程 第1章 C++編程簡介 本章小結(jié) ◇ 字符集是構(gòu)成 C++程序語句的最小元素,程序的中除了字符串常量外,所有構(gòu)成程序的字母均取自字符集。 ◇ C++的基本數(shù)據(jù)類型包括布爾型、字符型、整數(shù)型、實(shí)數(shù)型、空值型。分別用 bool、 char、 int、 float、 void表示。其中 float類型對有些帶小數(shù)的實(shí)數(shù)只能近似表示。各種數(shù)據(jù)類型都有自己的表示范圍。 ◇ 在字符常量中,有些轉(zhuǎn)義如 \t,\n常用在輸出流中用來控制輸出格式。整數(shù) (常量 )的默認(rèn)類型為 int,實(shí)數(shù) (常量 )的默認(rèn)類型為 double。 ◇ 給變量賦值的實(shí)質(zhì)是將一個(gè)數(shù)放到變量名標(biāo)識的內(nèi)存單元中。在包含賦值運(yùn)算的運(yùn)算符中,操作數(shù)必須是一個(gè)左值。 ◇ 文字常量、符號常量、常變量統(tǒng)稱常量。 ◇ 各種運(yùn)算符種類繁多,且具有不同的優(yōu)先級與結(jié)合性,大致優(yōu)先順序?yàn)椋阂辉\(yùn)算優(yōu)先于二元運(yùn)算;二元運(yùn)算優(yōu)先于三元運(yùn)算;算術(shù)、移位、關(guān)系、按位、邏輯運(yùn)算的優(yōu)先級依次降低。 ◇ 復(fù)雜的運(yùn)算式要多使用括號以方便閱讀與理解。 ◇ 在表達(dá)式中,參加運(yùn)算的數(shù)據(jù)如果類型不同可以自動(dòng)轉(zhuǎn)換,自動(dòng)轉(zhuǎn)換的規(guī)律是低類型向高類型轉(zhuǎn)換,以不丟失數(shù)據(jù),不降低精度為原則。 ◇ 除了自動(dòng)類型轉(zhuǎn)換外, C++提供了多種強(qiáng)制類型轉(zhuǎn)換方法,供在特定的場合使用。 ◇ 在含操作數(shù)計(jì)算次序不定的運(yùn)算符的表達(dá)式中,避免在其操作數(shù)中引入帶副作用的運(yùn)算符。帶副作用的運(yùn)算符有 ++、 、各類賦值運(yùn)算符等。