首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言混合運算類型轉換規則:2.5 + 1 * 7 % 2 / 4 步步拆解

     編輯:C 語言問答

表達式求值完整過程

2.5 + 1 * 7 % 2 / 4

步驟 1:運算符優先級確定結合順序

* / % 同級,左結合 → ((1 * 7) % 2) / 4
+ 最後結合 → 2.5 + (((1 * 7) % 2) / 4)

步驟 2:整數子表達式求值 (int 運算)

1 * 7   = 7        (int)
7 % 2   = 1        (int, 餘數)
1 / 4   = 0        (int, 整數除法截斷向零)

整數部分結果為 0 (int)。

步驟 3:隱式類型提升 (Usual Arithmetic Conversions)

2.5 是 double 常量。
double + int → int 提升為 double → 0.0。

步驟 4:最終浮點加法

2.5 + 0.0 = 2.5  (double)

結果取決於賦值目標類型

關鍵知識點總結

  1. 整數除法向零截斷:1/4 = 0,-1/4 = 0 (C99 規定向零)。
  2. % 運算符要求整數操作數,結果符號與被除數同號 (C99)。
  3. 混合類型運算自動提升:低精度向高精度提升 (int→float→double)。
  4. 賦值時再發生轉換:右值類型向左值類型轉換,可能縮窄/截斷。
  5. 常量字面量類型:2.5 默認 double,2.5f 為 float,2 為 int。

驗證代碼

#include 
int main() {
    int i = 2.5 + 1 * 7 % 2 / 4;
    float f = 2.5 + 1 * 7 % 2 / 4;
    double d = 2.5 + 1 * 7 % 2 / 4;
    printf("int: %d\nfloat: %f\ndouble: %f\n", i, f, d);
    return 0;
}
// 輸出:
// int: 2
// float: 2.500000
// double: 2.500000

理解「整數運算在整數域完成,再參與浮點運算」是避免精度驚訝的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
目標變量類型賦值結果說明
int x2double → int 截斷小數部分
float x2.5fdouble → float 精度足夠
double x2.5保持原精度
unsigned int x2同有符號截斷