コースの内容#
C 言語の数学演算#
-
-
= 代入
- 他の演算子と組み合わせて使用できます:+=、<<=、...
-
/ 除算
- 左右が整数の場合:商を求め、切り捨てます
- 左右のいずれかが浮動小数点数の場合:結果は浮動小数点数になります
-
() 演算の優先順位を上げる
-
⭐ビット演算、効率が高い
- コンピュータは異なるデータ型に対して、すべてのデータを2 進数で格納します
- 8 ビット→1 バイト
- int 型は 32 ビットで、符号付きの場合は 2^31-1 まで表現できます
- ビット演算では、①2 進数表現に展開し、②対応するビットの間にのみ関係がある
- ビット演算は浮動小数点数に対応していませんか?
- 意味がありません。64 ビットの浮動小数点数の場合、最上位の 1 ビットは符号ビット S で、次の 11 ビットは指数 E で、残りの 52 ビットは有効数字 M です。
- ビットごとの AND 演算を行う場合、最初の 12 ビットの演算規則は何ですか?指数ビットの AND 演算結果の意味は何ですか?これが本質的な問題です、2 つの浮動小数点数の AND 演算には数学的な意味がありません。
- ^ XOR
- 特徴:自己の逆演算;交換法則、結合法則をサポートします
- 逆演算
- 前提:交換法則を満たす
- 減算、除算は満たしません
- 減算は加算の逆演算ですが、逆は成り立ちません
- 除算は乗算の逆演算ですが、逆は成り立ちません [厳密ではなく、乗数が 0 の場合は考慮していません]
- 前提:交換法則を満たす
-
<<左シフト>> 右シフト
- 左シフト 1 ビットは 2 倍になります
- 右シフト 1 ビットは 2 で割り、切り捨て、符号は変わりません
- 左側は符号ビットを常に埋めます(符号ビットが最上位の符号付き数値の場合)
- 左側は強制的に 0 を埋めます(符号なし数値)
C 言語の数学関数#
ヘッダーファイル:math.h
注:abs () 関数は stdlib.h にあります
プロトタイプ | double pow(double a, double b); | 指数関数 |
---|---|---|
- | double sqrt(double x); | 平方根 |
- | double ceil(double x); | 切り上げ |
- | 戻り値は double 型であり、int の範囲を超える数値も表現できます | |
- | double floor(double x); | 切り捨て |
- | int abs(int x); | 整数の絶対値;stdlib.h |
- | doublefabs(double x); | 実数の絶対値;f は以前に float を表していたかもしれません |
- | double log(double x); | e を底とする対数 |
- | double log10(double x); | 10 を底とする対数 |
- | 底の変換公式を使用して、任意の底の対数を計算できます:log (2) 8 = log (8) /log (2) | |
- | double acos(double x); | 逆余弦関数:arccos () |
戻り値:角度の弧度法 ⭐π = acos(-1) |
授業の練習#
-
- double 型の制御文字は「% lf」です
- scanfの制御文字は必ず引数の型に対応する必要があります。そうでない場合、読み込むことができません
-
double x;
-
scanf するときは必ず「% lf」を使用する必要があります。「% f」を使用することはできません。以下のようになります:
-
- printf は厳格ではないため、制御文字と型が完全に一致する必要はありません。おそらく型変換が行われるでしょう
- コード
-
- pow を巧妙に使用し、1/3 乗は立方根を表します
- ⭐1/ 3**.0** ではなく、1 / 3 は使用できません
- math ライブラリを使用するために、gcc コンパイル時に - lm を追加する必要があります
-
-
-
-
- π は acos (-1) を使用してより正確に表現できます
- コード
- 除算後に乗算する方が安全で、オーバーフローしにくいです
ハイライトノート#
- double 型の制御文字は「% lf」です
- π は acos (-1) を使用してより正確に表現できます
コードデモ#
練習#
-
-
XOR を使用した交換はユニークなアプローチですが、おすすめではありません
- 整数型のみで使用できるため、XOR を使用できます
- 速度は temp を使用するよりも速くありません
- 同じ変数同士の交換では 0 になります:swap (a, a)
追加の知識#
- 演算子の優先順位と結合順序表- 百度
- p-- の演算順序は ①p が指すアドレス - 1、②そのアドレスの値をで取得する
- (*p)-- は①p が指すアドレスの変数の値を取得し、その変数の値を - 1 することです
- p-- の演算順序は ①p が指すアドレス - 1、②そのアドレスの値をで取得する
- XOR の法則
- a ^ a = 0;
- 0 ^ a = a;
- 2 回ずつ現れる数字の配列から、一度だけ現れる数字を見つけることができます
- xshell で C 言語を実行すると、警告が表示されません
- g++ *.cpp -Wall
- このオプションを使用すると、GCC が提供する有用な警告をすべて有効にすることができます
- -W {warning} を使用して特定の警告をマークすることもできます
-
- g++ *.cpp -Wall
考えるポイント#
- XOR 演算を使用して変数を交換する利点は何ですか?
- 第三の変数のメモリを節約できます
- 原理を考える
- 逆演算を行うことができます
- または
- 自身と自身の XOR は 0 になります
* 任意の変数と 0 の XOR は値が変わりません - 上記の原理に基づいて考えると、実際には +- 演算子を使用してもできますか?
- a' = a + b
- b = a' - b = a
- a = a' - b = a' - a = b
- ただし、これによってビット演算の効率性が活用されず、2 つの数の和がオーバーフローしないことが保証される必要があります~
ヒント#
-
C 言語ドキュメント日本語版- 极客学院の翻訳
- C 言語には約 29 の関数ライブラリがあります
-
参考書の章を参照してください
-