首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 算術運算子完整指南:+ - * / %、優先序、溢位檢查、Math 類別與數值運算陷阱

     編輯:關於C#

算術運算子對照表

運算子名稱範例優先序結合性
+一元正號 / 加法+5 / a + b高 / 低右 / 左
-一元負號 / 減法-5 / a - b高 / 低右 / 左
*乘法a * b中左
/除法a / b中左
%餘數 (非模數)a % b中左

整數除法與餘數陷阱

int a = 7, b = 3;
int div = a / b;  // 2 (截尾向零)
int rem = a % b;  // 1

// 負數餘數:符號跟隨被除數 (C# 行為)
-7 % 3  = -1
7 % -3  = 1
-7 % -3 = -1

// 數學模數 (永非負) 需自行調整
int mod = ((a % b) + b) % b;

浮點數精度與比較

double d1 = 0.1 + 0.2; // 0.30000000000000004
bool eq = d1 == 0.3;   // false!

// 正確比較:容差法
bool AlmostEqual(double a, double b, double epsilon = 1e-10) 
    => Math.Abs(a - b) < epsilon;

// decimal 適合財務計算 (128-bit, 28-29 位有效數字)
decimal m1 = 0.1m + 0.2m; // 0.3 精確

溢位檢查與 checked/unchecked

int max = int.MaxValue;
// 預設 unchecked:溢位回繞
int overflow = max + 1; // -2147483648

// 區塊檢查
checked {
    int crash = max + 1; // OverflowException
}

// 運算式檢查
int safe = checked(max + 1);

// 編譯器選項:/checked+ 全專案啟用

Math 類別常用方法

方法說明範例
Abs絕對值Math.Abs(-5) = 5
Max/Min最大/最小值Math.Max(3,7) = 7
Sqrt平方根Math.Sqrt(16) = 4
Pow冪次Math.Pow(2,10) = 1024
Round四捨五入 (銀行家算法)Math.Round(2.5) = 2
Floor/Ceiling向下/向上取整Math.Floor(2.9) = 2
Log/Log10自然/常用對數Math.Log(Math.E) = 1
Sin/Cos/Tan三角函數 (弧度)Math.Sin(Math.PI/2) = 1
Clamp限制範圍 (C# 7+)Math.Clamp(15, 0, 10) = 10

進階數值運算

  • BigInteger (System.Numerics):任意大小整數
  • Complex:複數運算
  • Vector<T> / Matrix4x4:SIMD 向量化運算
  • Random.Shared.Next() (C# 9+):執行緒安全亂數

運算子優先序完整表 (高→低)

1. 主運算式: x.y, f(), a[i], x++, x--, new, typeof, checked, unchecked
2. 一元: +, -, !, ~, ++x, --x, (T)x, await, &, *, -> (指標)
3. 乘法性: *, /, %
4. 加法性: +, -
5. 位移: <<, >>
6. 關係/型別測試: <, >, <=, >=, is, as
7. 等值: ==, !=
8. 邏輯 AND: &
9. 邏輯 XOR: ^
10. 邏輯 OR: |
11. 條件 AND: &&
12. 條件 OR: ||
13. Null 合併: ??
14. 條件: ?:
15. 指派: =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, ??=
16. Lambda: =>

算術運算子表
優先序
Math範例1
Math範例2

本文對應《叩響 C# 之門》第 3.1 節算術運算子教學內容

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved