C语言根本数据范例与范例提升机制

[复制链接]
发表于 2026-3-10 12:47:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、根本整数范例

  整数范例用于体现不带小数部分的数值。C语言是通过长度和符号两个维度来扩展整数范例。但是必要注意 C 标准只规定了最小位数,不规定具体巨细,具体实现则由编译器宁静台决定。下面按照通例情况阐明整数范例:
范例常见巨细char8 bitshort16 bitint32 bitlong32 bitlong long64 bit(一)、有符号短整型(short)

  short 是 signed short 的简写,其位宽至少有16位,常见的 short 范围是 -32768~32767 ,盘算公式是 -2n-1 ~ 2n-1。
  1. short a;
  2. signed short b;
  3. short int c;
复制代码
  但是这里要注意不要假设位宽肯定是16位,只能假设 ≥16位。同时short在到场表达式盘算时会发生整数提升,通常是被提升为 int。
(二)、无符号短整型(unsigned short)

  unsigned short 是 short 的无符号版本,只能体现非负整数,其位宽与short类似,常见的范围是 0~65535,盘算公式是 0 ~ (2n-1)。
  1. unsigned short a;
  2. unsigned short int b;
复制代码
(三)、有符号整型(signed int)

  int 是 signed int 的简写,C标准规定 int位宽 ≥ short位宽 ,在大多数32位体系中 int 位宽是 32bit,常见范围是 -2147483648 ~ 2147483647。
  1. int a;
  2. signed int b;
复制代码
  int 是C语言最常利用的整数范例。
(四)、无符号整型(unsigned int)

  unsigned int 是 int 的无符号版本,只能体现非负整数,其位宽与 int 类似,常见范围是 0 ~ 4294967295。
  1. unsigned int a;
复制代码
(五)、有符号长整型(long)

  long 是 signed long int 的简写,C标准规定 long位宽 ≥ int 位宽,但在大多数32位体系中,long位宽是32bit,常见范围是 -2147483648 ~ 2147483647。
  1. long a;
  2. signed long b;
  3. long int c;
复制代码
(六)、无符号长整型( unsigned long)

  unsigned long 是 long 的无符号版本,只能体现非负整数,其位宽与 long 类似,常见范围是 0 ~ 4294967295。
  1. unsigned long a;
复制代码
(七)、有符号长长整型( long long)

  long long 是 signed long long 的简写,其位宽是 64bit,常见的范围是 -263 ~ 263 -1,也就是 -9223372036854775808 ~ 9223372036854775807。
  1. long long a;
  2. signed long long b;
复制代码
(八)、无符号长长整型(unsigned long long)

  unsigned long long 是 long long 的无符号版本,只能体现非负整数,其位宽与 long long 类似,常见范围是 0 ~ 264 - 1,也就是 0 ~ 18446744073709551615。
  1. unsigned long long a;
复制代码
(九)、字符整型(char)

  char 在C语言中也是整数范例,并不是专门的“字符范例”。筹划 char 的初志是用于存储一个字节的数据,因此既可以体现字符,也可以体现小范围的整数。按照C标准规定 char = 1 byte ,通常在绝大多数体系中其位宽是 8bit。标准允许 byte ≥ 8bit,但是该情况仅为标准兼容筹划,现实中全部主流平台(PC、嵌入式、MCU)的 1byte 均为 8bit。
  signed char 的常见范围是 -128 ~ 127,unsigned char 的常见范围是  0 ~ 255,而 char 由编译器决定。
  1. char a;
  2. signed char b;
  3. unsigned char c;
复制代码
  必要注意 char 是否带符号由编译器决定。比如在Keil ARMCC中 char 默认范例是 unsigned char ,但是在GCC中 char 默认范例是 signed char。
二、浮点数

  浮点数用于体现带小数的数值。C语言提供了三种浮点范例:
范例精度常见巨细float单精度4字节double双精度8字节long double扩展精度8 / 16  这些范例通常遵照 IEEE-754 浮点标准举行存储。它们的重要区别在于存储精度和体现范围。在嵌入式体系中,double 和 long double 每每会退化为 float,因此在MCU开辟中,最常利用的浮点范例通常是float。
(一)、单精度浮点数(float)

  float 是单精度浮点数,通常占4字节(32bit),在IEEE-754标准中,其内部布局为

  • 符号位      1bit
  • 指数          8bit
  • 尾数          23bit
  float 可体现的有用十进制精度约为 6~7位,其常见范围是 约±3.4×10³⁸。
  1. float a = 3.3f;
复制代码
  在一样寻常开辟中必要注意,在利用 float 时,如果MCU没有 FPU(浮点运算单位),浮点运算会通过软件实现,盘算速率会显着慢于整数运算。
(二)、双精度浮点数(double)

  double 是双精度浮点数,在桌面体系中通常为8字节(64bit)。在IEEE-754标准中,其内部布局为

  • 符号位      1bit
  • 指数          11bit
  • 尾数           52bit
  double 可体现的有用十进制精度约为15位,其常见范围是 约1.7×10³⁰⁸。
  1. double pi = 3.141592653589793;
复制代码
(三)、扩展精度浮点数(long double)

  long double 用于提供比 double 更高的精度。C标准中只规定了 long double ≥ double,但具体实现依赖平台。常见情况如下:
平台long double巨细Windows MSVC8 byteGCC x8616 byteARM嵌入式8 byte三、范例级别

  在C语言表达式盘算中,差别范例之间会发生范例提升(Type Promotion)。常见的范例次序是
  1. long double
  2. double
  3. float
  4. unsigned long long
  5. long long
  6. unsigned long
  7. long
  8. unsigned int
  9. int
复制代码
  这个也是范例的级别,从高到低排序,仅做参考。但是存在一个例外的情况就是当long和int的巨细类似时,unsigned int 比 long 的级别高。这里之以是没有列出short和char范例,是由于它们已经被升级到int或unsigned int。
  当差别范例到场运算时,低品级范例会提升为高品级范例,比方:
  1. short a = 10;
  2. int b = 20;
  3. int c = a + b;
复制代码
  在这里 short->int,这是由于C语言规定:short 和 char 在表达式中会自动提升为 int。这个过程被称为Integer Promotion(整数提升)。同时必要注意的是,整数范例之间并不存在一个简朴的线性"品级次序"。当差别整数范例到场运算时,编译器会根据范例宽度和符号属性 按规则选择符合的目标 范例,这一过程属于 Usual Arithmetic Conversions (通例算术转换)。
  以上就是对C语言根本数据范例的先容。在现实开辟中,我们每每也必要根据根本数据范例的数据范围、存储空间以及盘算服从等角度去选择符合的数据范例。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表