目錄
C++運算符優先級(詳解)
C++運算符使用注意點
部分C++運算符例子
鞏固——挑戰習題
小結
C++運算符優先級(詳解)
優先級 | 運算符 | 說明 | 結合性 |
1 | :: | 範圍解析(作用域運算符) | 從左到右 |
2 | ++ -- | 字尾加加/減減 | 從左到右 |
2 | ( ) [ ] . -> | 括号,數組,成員選擇 | 從左到右 |
3 | ++ -- | 字首加加/減減 | 從右到左 |
3 | + - | 正/負 | 從右到左 |
3 | ! ~ | 邏輯非/按位取反 | 從右到左 |
3 | ( ) | 強制類型轉換 | 從右到左 |
3 | * | 解引用(拿到位址處值) | 從右到左 |
3 | & | 取位址 | 從右到左 |
3 | sizeof | 求位元組大小 | 從右到左 |
3 | new new[ ] | 動态/(動态數組)記憶體配置設定 | 從右到左 |
3 | delete delete[ ] | 動态/(動态數組)記憶體釋放 | 從右到左 |
4 | .* ->* | 指向成員指針 | 從左到右 |
5 | * / % | 乘 除 餘 | 從左到右 |
6 | + - | 加 減 | 從左到右 |
7 | << >> | 左移 右移 | 從左到右 |
8 | < <= > >= | 小于,小于等于 大于,大于等于 | 從左到右 |
9 | == != | 等于 不等于 | 從左到右 |
10 | & | 按位與 | 從左到右 |
11 | ^ | 按位異或 | 從左到右 |
12 | | | 按位或 | 從左到右 |
13 | && | 邏輯與 | 從左到右 |
14 | || | 邏輯或 | 從左到右 |
15 | ?: | 條件運算符 | 從右到左 |
16 | throw | 抛出 | 從右到左 |
16 | = += -= *= /= &= <<= >>= &= ^== |= | 前面的數和後面的數做運算指派給前面那個數 | 從右到左 |
17 | , | 逗号表達式(值為逗号表示式最後元素的值) | 從左到右 |
C++運算符使用注意點
1.在使用算數運算符需要注意以下4個問題。
- 防止資料長度的溢出
- 遵循算數的自然特征,例如禁止除數為0。
- 取模辨別符“%”要求參與運算的兩個數均為整數
- “/”運算符的兩個運算對象均為整數時,其結果是整數;如果有一個是浮點型資料,其結果就是浮點型資料,其結果就是浮點數。
2.由于++,--運算符内含了指派運算,是以運算對象隻能指派,不能作用于常量和表達式
比如7++,8--,(m+n)++這裡m和n是變量都是不合法的。
3.移位操作符效率高但是容易溢出!
4.注意C++中的位移運算符就是那兩個<<和>>和輸入輸出流操作cout<<和cin>>這裡面的符号雖然相同但是功能上是不一樣的,原因是因為C++對這兩個移位操作符進行了重載,用于輸入輸出流,<<和>>單獨使用就還是移位操作符,佬們是不是不用糾結重載的概念,在後面将會深入介紹和學習!!!
以下是我找尋的大佬對于溢出的解釋,再次表示感謝!
溢出:計算機組成原理筆記——移位運算,補碼加減法及溢出現象_我要吃一條街的部落格-CSDN部落格_補碼左移溢出規則
部分C++運算符例子
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;//包含頭檔案在命名空間
int main()
{
int m = 5;
cout << m++ << endl;
cout << m-- << endl;
cout << ++m << endl;
cout << --m << endl;
cout << -m++ << endl;
cout << -m++ << endl;
return 0;
}
想一想會列印出什麼?尤其是最後兩個。
答案是5 6 6 5 -5 -6
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;//包含頭檔案在命名空間
int main()
{
int i = 1, j = 2, k = 2, m = 4, n = 2;
k += i;
m %= j;
n += n -= n * n;
cout << "k= " << k << "m= " << m << "n= " << n << endl;
return 0;
}
輸出為 k=3 m=0 n=-4
第三個n最後怎麼算出來-4的呢,按照優先順序,*先算然後+=和-=優先級相同,從右向左運算,是以是以最後得出n為-4。
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = 2, c = 3;
cout << "a=" << a << " b=" << b << " c=" << c << endl;
//顯示這三個的值是多少
b += a + 2 * c % 5;
cout << "b=" << b << endl;
a *= b = c = 3;//等價于c=3,b=a,a=a*b;
cout << "a=" << a << " b=" << b << " c=" << c << endl;
a += b += c;//等價于b=b+c;a=a+b;
cout << "a=" << a << " b=" << b << " c=" << c << endl;
a -= b = ++c + 2;//等價于++c;b=b+c;a=a-b;
cout << "a=" << a << " b=" << b << " c=" << c << endl;
return 0;
}
答案:
a=1 b=2 c=3
b=4
a=3 b=3 c=3
a=9 b=6 c=3
a=3 b=6 c=4
鞏固——挑戰習題
通過輸入三角形3條邊邊長判斷能否構成三角形,如果可以,運用數學公式求出三角形面積
a=根号下(s(s-a)(s-b)(s-c)),s=(a+b+c)/2;
題比較簡單,直接上代碼!
#include<iostream>
#include<math.h>//因為你需要使用sqrt開根号函數是以要引這個頭檔案
using namespace std;
int main()
{
float a, b, c;
float s, area;
cin >> a >> b >> c;//輸入a,b,c的值
if (a > 0 && b > 0 && c > 0)
{
if (a + b <= c || b + c <= a || a + c <= b)
{
cout << "這三邊無法構成三角形" << endl;
}
else
{
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));//利用公式求值
cout << "a=" << a << " b=" << b << " c=" << c << " s=" << s << endl;
cout << "area=" << area << endl;
}
}
return 0;
}
小結
這篇部落格就是講了C++的運算符及其優先級,和一些具體例子和使用的注意事項,有些運算符比如throw還沒接觸,但是不用着急,會馬上更新的,覺得有幫助的點個贊謝謝,有什麼意見問題,評論區可以暢所欲言。