03-数据类型
整型、浮点型、字符、字符串、布尔型、常量与变量的解析
文章目录
一、整型
int a = 0;
注意事项
在32位系统和64位系统中,整型(int)都占用4字节。
1.1 取值范围
通过命令行工具getconf可以获取整型的最大值和最小值:
$ getconf INT_MAX
2147483647
$ getconf INT_MIN
-2147483648
1.2 整型的修饰符
short:短整型,用于将整型的尺寸减少为原本的一半,减少内存开支,缩小取值范围。
long:长整型,用于将整型的尺寸变大,增加内存开支,扩大取值范围。
long long:长长整型,用于进一步增加整型的尺寸和取值范围。在64位系统中,long与long long的大小一致。
unsigned:无符号整型,用于去掉符号位,使得整型数据没有负数,扩展正整数的取值范围(0到4294967295)。
1.3 整型数据的符号位
整型数据在二进制存储时,最高位(第31位)表示符号位:
如果符号位为1,则表示负数。
如果符号位为0,则表示正数。
1.4 整数的存储方式
1.4.1 原码
正整数是直接使用原码进行存储的。原码是指整数的绝对值的二进制表示。
例如,整数100的原码表示如下:
100 --> 0000 0000 0000 0000 0000 0000 0110 0100
1.4.2 补码
负数使用补码来存储。补码的计算方法是:取该数的原码的绝对值,取反加1。
符号位(最高位)不变。
例如,-100的补码表示如下:
- 计算100的二进制原码:
(注意其实是-100的原码,符号位带上了为1)
100 --> 1000 0000 0000 0000 0000 0000 0110 0100
- 取反(符号位保持不变):
取反-> 1111 1111 1111 1111 1111 1111 1001 1011
- 加1:
加1 -> 1111 1111 1111 1111 1111 1111 1001 1100
所以,-100的补码表示为:
1111 1111 1111 1111 1111 1111 1001 1100
1.4.3 溢出
当整数运算的结果超过其取值范围时,会发生溢出。溢出后的结果会变成相邻的最小值或最大值。
例如,对于32位有符号整数(int):
- 最大值是2147483647(
0111 1111 1111 1111 1111 1111 1111 1111) - 最小值是-2147483648(
1000 0000 0000 0000 0000 0000 0000 0000)
如果将最大值加1,则会溢出为最小值:
2147483647 + 1 = -2147483648
1.4.4 示例
以下示例代码演示了正整数和负整数的存储方式及溢出情况:
#include <stdio.h>
#include <limits.h>
int main() {
int positive = 100;
int negative = -100;
printf("正整数 %d 的二进制表示(原码):%x\n", positive, positive);
printf("负整数 %d 的二进制表示(补码):%x\n", negative, negative);
// 演示溢出
int max_int = INT_MAX;
int min_int = INT_MIN;
printf("最大整型值: %d\n", max_int);
printf("最小整型值: %d\n", min_int);
printf("最大整型值加1(溢出):%d\n", max_int + 1);
printf("最小整型值减1(溢出):%d\n", min_int - 1);
return 0;
}
输出结果
正整数 100 的二进制表示(原码):64
负整数 -100 的二进制表示(补码):ffffff9c
最大整型值: 2147483647
最小整型值: -2147483648
最大整型值加1(溢出):-2147483648
最小整型值减1(溢出):2147483647
二、浮点型(实型)
概念:浮点型用于表达一个实数的数据类型。
2.1 分类
- 单精度浮点型(
float)- 典型尺寸:4字节
- 双精度浮点型(
double)- 典型尺寸:8字节
- 长双精度浮点型(
long double)- 典型尺寸:16字节
占用的内存越多,则精度越高。但是注意是经典尺寸,在不同系统中可能不同。
2.2 浮点数的存储
IEEE 754浮点数标准采用如下形式来表示一个浮点数:

- 单精度浮点数(32位)
- 符号位(S):1位
- 指数位(E):8位
- 尾数位(M):23位
</

最低0.47元/天 解锁文章
2842

被折叠的 条评论
为什么被折叠?



