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

C++ 多字符常量 'ABCD' 的整數值與端序解析

     編輯:C++ 入門

現象

代碼中出現 case 'ABCD':,'ABCD' 是合法的多字符常量,類型為 int,值由四字符按內存佈局組合而成。

小端模式下的值計算

x86 為小端序:低地址存低位字節。
'ABCD' 在內存中按順序存放:A(0x41) B(0x42) C(0x43) D(0x44)(地址遞增)。
作為 int 讀取時,最低有效字節在最低地址,即:


地址:  低 --------------------> 高
字節:  0x41  0x42  0x43  0x44
       │     │     │     │
       ▼     ▼     ▼     ▼
int值: D<<24 | C<<16 | B<<8 | A = 0x44434241

十進制:1145258561(或 1094861636 視編譯器對字符符號擴展處理)。

驗證代碼


int flag = 'ABCD';
printf("%d\n", flag);        // 1094861636 (GCC)
printf("%X\n", flag);        // 41424344
char *p = (char*)&flag;
printf("%c%c%c%c\n", p[0], p[1], p[2], p[3]); // DCBA (小端讀出反序)

長度限制

  • 'ABC' (3 字符) → 佔低 3 字節,高字節補 0,合法。
  • 'ABCDE' (5 字符) → 編譯錯誤:超過 int 寬度(標準規定實現定義,通常報錯)。

實用建議

避免使用多字符常量:可移植性差(端序、int 寬度、字符符號擴展均為實現定義),可讀性差,易混淆。改用 enum、constexpr int 或字符串比較。

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