各種運算子
1, 逗號運算子
使用逗號運算子是為了把幾個運算式放在一起。整個逗號運算式的值為系列中最后一個運算式的值。
2, 關系運算子
相等運算子(==),不等運算子(!=),大于運算子(>),小于運算子(<),大于等于運算子(>=)以及小于等于運算子(<=)。
(除非多載,關系運算子的運算結果一般為布林值)
3, 條件運算子
形式: exp1?exp2:exp3
如果exp1為真,則計算exp2的值,且為最終結果;如果exp1為假,則計算exp3的值,且為最終結果。
4, 邏輯運算子
包括邏輯與運算子(&&)、邏輯或運算子(||)和邏輯非運算子(!)。
其中邏輯與和邏輯或運算在C++中采用短路實作,即對于(A&&B),假如已經運算得知A為false,則不再對B進行運算,直接回傳結果false;對于(A||B),假如已經運算得知A為true,則不再對B進行運算,直接回傳true。
sizeof運算
定義:
sizeof運算子回傳一條運算式或一個型別名字所占的位元組數。
sizeof運算子滿足右結合律,其所得的值是一個size_t型別的常量運算式。(size_t型別是一種機器相關的無符號型別,足夠大可以表示記憶體中任意物件的大小)
使用方法:
sizeof (type);
sizeof expr;
注:
sizeof的結果部分依賴于其作用的型別:
1、對char或者型別為char的運算式執行sizeof運算,結果為1;
2、對參考型別執行,得到被參考物件所占空間大小;
3、對指標執行sizeof運算得到指標本身所占空間的大小;
4、對解參考指標執行得到指標指向的物件所占空間的大小,指標不需要有效;
5、對陣列執行得到整個陣列所占空間的大小,等價于對陣列中所有的元素個執行一次sizeof運算并將得到的結果求和。
位運算子
位運算子作用于位,并逐位執行操作。&、 | 和 ^ 的真值表如下所示:
p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
假設如果 A = 60,且 B = 13,現在以二進制格式表示,它們如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
下表顯示了 C++ 支持的位運算子。假設變數 A 的值為 60,變數 B 的值為 13,則:
運算子 描述 實體
& 如果同時存在于兩個運算元中,二進制 AND 運算子復制一位到結果中。 (A & B) 將得到 12,即為 0000 1100
| 如果存在于任一運算元中,二進制 OR 運算子復制一位到結果中。 (A | B) 將得到 61,即為 0011 1101
^ 如果存在于其中一個運算元中但不同時存在于兩個運算元中,二進制異或運算子復制一位到結果中。 (A ^ B) 將得到 49,即為 0011 0001
~ 二進制補碼運算子是一元運算子,具有"翻轉"位效果,即0變成1,1變成0。 (~A ) 將得到 -61,即為 1100 0011,一個有符號二進制數的補碼形式。
<< 二進制左移運算子。左運算元的值向左移動右運算元指定的位數。 A << 2 將得到 240,即為 1111 0000
>> 二進制右移運算子。左運算元的值向右移動右運算元指定的位數。 A >> 2 將得到 15,即為 0000 1111
運算子優先級
優先級 運算子 結合律 助記
1 :: 從左至右 作用域
2 a++、a--、type()、type{}、a()、a[]、.、-> 從左至右 后綴自增減、函式風格轉型、函式呼叫、下標、成員訪問
3 !、~、++a、--a、+a、-a、(type)、sizeof、&a、*a、new、 new[]、delete、 delete[] 從右至左 邏輯非、按位非、前綴自增減、正負、C 風格轉型、取大小、取址、指標訪問、動態記憶體分配
4 .*、->* 從左至右 指向成員指標
5 a*b、a/b、a%b 從左至右 乘除、取模
6 a+b、a-b 從左至右 加減
7 <<、>> 從左至右 按位左右移
8 <、<=、>、>= 從左至右 大小比較
9 ==、!= 從左至右 等價比較
10 a&b 從左至右 按位與
11 ^ 從左至右 按位異或
12 | 從左至右 按位或
13 && 從左至右 邏輯與
14 || 從左至右 邏輯或
15 a?b:c、=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>= 從右至左 三元條件、賦值
16 , 從左至右 逗號
資料型別轉換
一、在c++中的資料型別轉換一般有以下幾種情況:
1、將一種算術型別的值賦給另一種算術型別的變數時,c++將對值進行轉換
2、運算式中包含不同的型別時,c++將對值進行轉換
3、將引數傳遞給函式時,c++將對值進行轉換
二、在進行資料型別轉換的時候要注意幾點:
1、將小的資料型別轉化為大的資料型別,不會出現問題,一般只是轉化后所占用的位元組更多了,但是要將大的資料型別轉化為小的資料型別的話,就會造成資料的丟失。
2、將較大的浮點數轉化為較小的浮點數,如double轉化為float ,這會造成精度(有效數位)降低,值可能超出目標型別的取值范圍,在這種情況下,結果將是不確定的。
3、將浮點型別轉換為整型,這會造成小數部分丟失,原來的值可能超出目標型別的取值范圍,在這種情況下,結果將是不確定的。
4、當運算涉及到兩種資料型別時,一般是較小的型別將被轉換為較大的型別。
三、強制型別轉換:
1、形式:
a、(typeName) value (C語言的寫法)
b、value (typeName) (c++的寫法)
c、static_cast<> 可以將值從一種數值型別轉換為另外一種資料型別,格式為: static_cast<typeName> (value)
四、總結:
整型資料型別大小排序: bool , char , signed char, unsigned char, short , unsigned short , int , unsigned int ,long , unsigned long , long long , unsigned long long
浮點數排序大小:float , double , long double
uj5u.com熱心網友回復:
總結得很好,好東西轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/25864.html
標籤:基礎類
上一篇:求編程
下一篇:Python求助大佬
