【C++入門から熟練練習問題まで】005式と演算子優先度

5135 ワード

目次
一、前言
1、前回の授業の回顧
2、前の節の思考問題の答え
二、重点知識の紹介
1、式
1.式とは
2.演算子
3.一般的な表現
2、C++共通演算子優先度
1.演算子優先度テーブル
2.重点説明
3.ショート
4.例
三、思考問題
一、前言
1、前回の授業の回顧
前回はstrlenとsizeofの違いをお話ししましたが、期末試験だけでなく、後でコードを書く過程でも文字列の長さを計算するためにこの2つをよく使うので、後で間違いやすいことを理解しなければなりません.
今日は主に式と演算子の優先度の問題についてお話しします.これはC++を初めて学ぶ学生にとっても難点で、みんなが心を込めて勉強することを望んでいます.
2、前の節の思考問題の答え
前回の授業では、次の文字列の長さを分析させました.
char a[] = "ab\0cd\5\\";

char a[10] = "ab\0cd\5\\";

char a[] = "ab\1cd\5\\";

答えは次のとおりです.
文字列
sizeof
strlen
char a[] = "ab\0cd\5\\";
8
2
char a[10] = "ab\0cd\5\\";
10
2
char a[] = "ab\1cd\5\\";
8
7
二、重点知識の紹介
1、式
1.式とは
式は、演算子とオペランドからなる式です.例:
1+2+3;

a = 4*5/6;

2.演算子
演算子には、定数、変数、関数、および独自の名前の識別子が含まれます.
3.一般的な表現
一般的な式は次のとおりです.
1.算術式
算術演算子とビット演算子からなる式で、その値は算術値です.タイプはオペランドで決まります.
例は次のとおりです.
6 * 5 / 3 - 4 + 5

2.論理式
論理演算子からなる式.タイプはboolタイプです.
例は次のとおりです.
5 && 6 && i++

3.関係式
リレーショナル演算子からなる式.タイプはboolタイプです.
例は次のとおりです.
i != 5

4.代入式
代入演算子からなる式.付与演算子は11種類あり,基本的なもの,11種類の複合的なものである.
代入演算子には2つの重要な特徴があります.
(1)結合性は右から左へである.
(2)カンマ式より優先度が低い.
例は次のとおりです.
i += 5

5.条件式
3つの演算子からなる式.3つの演算子の形式は次のとおりです.
a > b? a : b

6.カンマ式
いくつかの式をカンマで接続した式.
例は次のとおりです.
i-=3, i++ 

 
2、C++共通演算子優先度
1.演算子優先度テーブル
次の表は、一般的な演算子名とその使用優先度です.
優先度
演算子
名前または意味
使用方法
結合方向
説明
1
[]
配列の下付き
配列名[整数式]
左から右
 
()
かっこ
(式)/関数名(パラメータテーブル)
 
.
メンバー選択(オブジェクト)
オブジェクトメンバー名
 
->
メンバー選択(ポインタ)
オブジェクトポインタ->メンバー名
 
2
-
マイナス記号演算子
-算術タイプ式
右から左
単項演算子
(type)
強制型変換
スカラ式
 
++
じこぞうふくえんざんし
++スカラータイプ左式を変更
単項演算子
--
自己減算演算子
--スカラータイプは左の式を変更できます
単項演算子
*
値演算子
*ポインタタイプ式
単項演算子
&
アドレス演算子
&式
単項演算子
!
論理非演算子
!スカラタイプ式
単項演算子
~
ビット単位逆演算子
~整数表現
単項演算子
sizeof
長さ演算子
sizeof式sizeof(タイプ)
 
3
/
を除いて
式/式
左から右
両目演算子
*
乗ずる
式*式
両目演算子
%
ざんさ
整数表現%整数表現
両目演算子
4
+
プラス
式+式
左から右
両目演算子
-
減らす
式→式
両目演算子
5
<<
左に移動
整数表現<
左から右
両目演算子
>>
右に移動
整数表現>>整数表現
両目演算子
6
>
より大きい
エクスプレッション>エクスプレッション(Expression>Expression)
左から右
両目演算子
>=
以上
エクスプレッション>=エクスプレッション
両目演算子
<
より小さい
式#シキ#
両目演算子
<=
以下
式<=式
両目演算子
7
==
に等しい
式==式
左から右
両目演算子
!=
等しくない
式!=式#シキ#
両目演算子
8
&
ビットと
整数式&整数式
左から右
両目演算子
9
^
ビット別異動
整数式^整数式
左から右
両目演算子
10
|
ビット単位または
整数式|整数式
左から右
両目演算子
11
&&
ロジックと
式&&式
左から右
両目演算子
12
||
論理または
式||式
左から右
両目演算子
13
?:
条件演算子
式1?式2:式3
右から左
さんこうえんざんし
14
=
代入演算子
左式を変更可能=式
右から左
 
/=
除後賦課
左式を変更可能/=式
 
*=
乗後賦課
左式を変更可能*=式
 
%=
型取り後付与
左式を変更可能%=式
 
+=
かごわりあて
左式+=式を変更可能
 
-=
減算代入
左式を変更可能-=式
 
<<=
左に移動して値を割り当てる
左式を変更可能<=式
 
>>=
右に移動すると値が割り当てられます
左式を変更可能>=式
 
&=
ビットとポストで値を割り当てる
左式を変更可能&=式
 
^=
ビットごとに値を割り当てる
左式^=式を変更可能
 
|=
ビットまたはポストで値を割り当てる
左式の変更可能|=式
 
15
,
カンマ演算子
式、式、...
左から右
左から右へ順に結合
2.重点説明
多くの人がこの表が複雑な式に遭遇しても計算できないので、以下のように説明します.
1.式を分析するとき、左から右を見る.
2.優先度が高い場合、優先度が低い場合.
3.同級であれば、結合方向を見て、結合方向が左から右であれば、まず左を計算してから右を計算する.結合方向が右から左になると、まず右を計算してから左を計算します.
4.カッコで優先度を変更できます.
5.論理と論理を使用するか、「ショート」という概念があります.
3.ショート
論理と:1つが偽である場合、最終的に偽である場合、a&&bにおけるaが偽である場合、bは実行する必要がなく、短絡される.
論理または:1つが真である場合、最終的に真である場合、a|b中のaが真である場合、bは実行する必要がなく、短絡される.
4.例
皆さんの理解を助けるために、特にいくつかの例を挙げて説明します.
(1)!a &&++b //a = 8 , b = 2
左から右を見ると、論理が違う!2級で、論理と(11級)より高くて、先に計算します!aは0で、論理と、短絡されて、後ろは操作しないので、aはまだ8で、bはまだ2です.
 
constキーワードを使用して定数フォーマットを宣言するには、次のようにします.
(2)a += b += a+b;//a = 8  b = 2
左から見ると、+=と+=は同級で、先に後ろを計算し、+の優先度が+=より高い場合、先に+を計算します.すなわち、上のコードはa+b=10を先に計算します.+=右から左へ結合するので、b+=a+bを先に計算し、最後にa+=bを計算します.上式は下式と等価です
b += (a+b);

a += b;

最後にb=12,a=20であった.
三、思考問題
a=12,b=3が知られている.
次の式の値と、aとbの値を分析します.
b||a-4&&a/b

b&&a*b&&a+b

a+b/(a+b)&&b++

a+=b*=a-=b/=a-b

思考問題の答えは次の「C++入門から熟練練習問題まで」で発表されますので、たくさん練習してほしいですね.