git:git clone [email protected]:buaadf/learncpp.git
c++提供了五種基本的算術運算:加減乘除和取模(+ - * / %)
程式3.10
#includeint main()
優先順序:先乘除,後加減。
* / %優先順序相同,+ -優先順序相同,在優先順序相同是,看運算元的
結合性是從左到右還是從右到左。
除法運算子(/)的行為取決於運算元的型別,如果兩個運算元都是整數,將執行整數除法(捨棄小數);如果有乙個(或兩個)運算元是浮點數,則結果為浮點數。
程式3.11
#includeint main()
執行結果:
取模即求整數除法的餘數。
程式3.12
#includeint main()
先用整數除法計算stone,再求餘數得pounds。1 stone=14 pounds
c++允許將一種型別的值賦給另一種型別的變數,值將轉換為接收變數的型別。
假設so_long的型別為long,thirty的型別為short,而程式中包含這樣的語句:
so_long=thirty;
程式將thirty的值擴充套件為long,並儲存在so_long中,而thirty內容不變。
將乙個值賦給範圍更大得型別不會有什麼問題。但是若是賦給範圍較小的型別則會降低精度。
程式3.13演示了一些初始化進行的轉換:
#includeint main()
執行結果:
這種初始化的方式被稱為列表初始化(list-initialization)。
列表初始化不允許縮窄(narrowing),即變數的型別可能無法表示賦給它的值,eg.不允許將浮點型轉換為整型。
當同乙個表示式中包含兩種不同的算術型別時,c++將執行兩種自動轉換:一些型別在出現時便會自動轉換;有些型別在與其他型別同時出現在表示式中時將被轉換。
自動轉換:
在計算表示式時,c++將bool、char、unsigned char、signed char和short值轉換為int。具體地說,true被轉換為1,false被轉換為0。這些轉換被稱為整型提公升。例如:
short chickens = 20;
short ducks = 35;
short fowl = chickens + ducks;
執行第三條語句時,c++將chickens和ducks的值轉換為int相加,再將結果轉換為short。
其他整型提公升:如果short比int段,則unsigned short將被轉換為int;如果兩種型別的長度相同,則unsigned short將被轉換為unsigned int。
wchar_t被提公升為下列型別中第乙個寬度足夠儲存wchar_t取值範圍的型別:int、unsigned int、long、unsigned long。
不同型別進行算術運算時的轉換:
(1)如果有乙個運算元的型別時long double,則將另乙個運算元轉換為long double;
(2)否則,如果有乙個運算元的型別是double,則將另乙個運算元轉換為double;
(3)否則,如果有乙個運算元的型別是float,則將另乙個運算元轉換為float;
(4)否則,說明運算元都是整數,因此執行整型提公升;
(5)在這種情況下,如果兩個運算元都是有符號或無符號的,且其中乙個運算元的級別比另乙個低,則轉換為級別高的型別;
(6)如果乙個運算元為有符號的,另乙個為無符號的,其無符號的運算元級別比有符號運算元的高,則將有符號運算元轉換為無符號運算元所屬的型別;
(7)否則,如果有符號型別可表述無符號型別的所有可能取值,則將無符號運算元轉換為有符號運算元所屬的型別;
(8)否則,將兩個運算元都轉換為有符號型別的無符號版本。
傳統c語言總是將float提公升為double,即使兩個運算元都是float。
傳遞引數時的型別轉換通常由c++函式原型控制。然而,也可以取消原型對引數傳遞的控制,儘管這樣做並不明智。在這種情況下,c++將對char和short型別進行整型提公升。
另外,為保持與傳統c語言中大量**的相容性,在將引數傳遞給取消原型對引數傳遞控制的函式時,c++將float引數提公升為double。
c++還允許通過強制型別轉換機制顯式的進行型別轉換。強制型別轉換的格式有兩種,例如,將變數thorn中的int值轉換為long型別,可用:
(long) thorn
long (thorn)
強制型別轉換不會修改thorn本身,而是建立乙個新的、指定型別的值,可以在表示式中使用這個值。
強制轉換的通用格式:
(type) value //來自c語言
type (value) //c++格式
static_cast<>可用於將值從一種數值型別轉換為另一種數值型別:
static_cast(value)
程式3.14
#includeint main()
執行結果:
19.99+11.99=31.98,將其賦給int型別時被截斷為31。在進行加法前強制型別轉換,則為19+11=30。
在初始化宣告時,如果使用關鍵字auto,而不指定變數的型別,編譯器將把變數的型別設定成與初始值相同:
auto n = 100; //n型別為int
auto x = 1.5; //x型別為 double
auto y = 1.3e1l; //y型別為long double
自動推斷型別一般用在複雜的情況。 c 算術運算子
一 算術運算子 加 減 乘 除 整型的除法是不算小數點的,也就是說結果是整數,餘數捨去了,求餘數看下面 求餘數 加減乘好理解,整型的除法和求餘數因為和我們平時習慣的計算不大一樣,做個例子 int i 5,j 2 console.writeline 算除法的結果 i j console.writeli...
C語言基礎學習運算子 基本算術運算子
基本算術運算子 c語言中用於基本算術運算的運算子有 這些運算子的用法和你想像到的基本無異 加法運算子 使得它兩側的值被加到一起。減法運算子 用它前面的數減去後面的數。乘法由 表示。c語言並沒有計算平方的函式,也沒有指數運算子。但你可以利用乘法來計算平方。符號 表示求餘。求餘運算的結果是兩數相除後的餘...
算術運算子
核心 運算子 就是對常量和變數進行操作的符號。分類 算術運算子,賦值運算子,比較運算子,邏輯運算子,位運算子,三目運算子 算術運算子 注意事項 a 整數相除只能得到整數。如果想得到小數,必須把資料變化為浮點數型別 b 獲取的是除法操作的商,獲取的是除法操作的餘數 class operatordemo...