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

C語言數據類型全解析:整數、浮點與邏輯類型

     編輯:關於C語言

C語言數據類型全解析:整數、浮點與邏輯類型

數據類型是C語言程序設計的基石。本文系統梳理整數、浮點數、邏輯類型的存儲機制、範圍、輸出格式及選擇原則,並深入探討補碼表示與浮點數精度陷阱。

一、整數數據類型

1. 基本整型與長度

類型說明典型大小
char字符型/最小整型1字節 (8位)
short短整型2字節 (16位)
int基本整型取決於編譯器/CPU位數
long長整型取決於編譯器/CPU位數

核心洞見:int 的大小通常等於CPU寄存器位寬(32位機為4字節,64位機常為4或8字節),這是為了讓CPU最高效地處理數據。可用 sizeof(int) 確認具體大小。

2. 補碼表示與有符號/無符號

計算機以補碼形式存儲有符號整數:

  • 正數:補碼 = 原碼
  • 負數:符號位不變,其餘位取反,最後加1

例如 8位 char:00000001 表示 1,11111111 表示 -1。範圍為 -128 ~ 127。

無符號類型(unsigned)無符號位,範圍為 0 ~ 255(8位)。其設計初衷是為了支持位移操作,避免符號位干擾。

3. 輸入輸出格式

printf 通過格式控制符輸出:

  • %d / %i:有符號十進制整數
  • %u:無符號十進制整數
  • %x / %X:十六進制
  • %o:八進制

4. 類型選擇原則

現代32/64位系統中,無特殊需求首選 int。使用 char/short 不一定節省空間(因內存對齊),反而可能因轉換開銷降低性能。這也是C語言可移植性較差的原因之一(Java固定 int 為4字節)。

二、浮點數據類型

類型位數範圍有效位數
float32位±1.2E-38 ~ ±3.4E+386~7位
double64位±2.2E-308 ~ ±1.79E+30815~16位
long double通常80/128位更大18~19位

關鍵特性

  • 編碼存儲:浮點數非二進制直接存儲,而是按IEEE 754標準編碼(符號位+指數位+尾數位)。
  • 無法精確表示所有十進制小數:如 0.1 在二進制中是無限循環,存儲時會有捨入誤差。
  • 不能直接用 == 比較:應用 fabs(a-b) < EPSILON(如 1e-12)判斷近似相等。
  • 硬件加速:現代CPU內置FPU(浮點運算單元)執行浮點運算。

三、邏輯數據類型

  • C語言原生無 bool,C99引入 <stdbool.h> 提供 bool, true, false(本質仍是整型)。
  • 規則:0 為假,非0 為真。邏輯運算結果為 0 或 1。

邏輯運算符

運算符名稱說明
!邏輯非0→1,非0→0
&&邏輯與短路求值:左側為假則不算右側
||邏輯或短路求值:左側為真則不算右側
&按位與逐位運算,不短路
|按位或逐位運算,不短路

優先級陷阱

單目運算符(!)優先級高於雙目運算符。!age < 20 等價於 (!age) < 20,而非 !(age < 20)。

總結

理解數據類型的存儲本質(補碼、IEEE 754)、範圍邊界、輸出格式及隱式轉換規則,是編寫高效、可移植、無Bug C代碼的前提。選擇類型時,以 int 為主,按需使用 long long/double/unsigned,謹記浮點數比較需容差。

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