天天看點

C++快速入門|系列(第三篇)                     C++運算符優先級(詳解)C++運算符使用注意點部分C++運算符例子鞏固——挑戰習題小結

目錄

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還沒接觸,但是不用着急,會馬上更新的,覺得有幫助的點個贊謝謝,有什麼意見問題,評論區可以暢所欲言。

繼續閱讀