C语言 - 数据的类型、大小、取值范围
数据
1 - 数据分为静态数据和动态数据
① 静态数据:一些永久性的的数据。一般存储在硬盘中,只要硬盘没坏数据都是存在的,一般以文件的形式存储在硬盘上
② 动态数据:程序运行过程中动态产生的的临时数据。一般存储在内存中,软件或者电脑关闭则这些临时数据会被清除
注:静态数据占硬盘空间,动态数据占内存空间。计算机中以字节为单位存储数据
2 - 单位换算
1B = 8bit 1k = 1024B = 2^10B 1M = 1024k = 2^20B
1G = 1024M = 2^30B 1T = 1024G = 2^40B
数据类型
1 - 数据类型表示了数据所能表示的范围和数据所占用的内存空间
注:枚举类型是基本数据类型,而不是构造类型。严格的说它是复合类型,是 C语言的内置类型(许多教材上将其归为构造类型)
2 - 字符型
① 存储形式:字符型 char c = 'A' 字符在内存中是以二进制的格式存储的,比如 char num = '6' 其对应的 ASCII 码值是 54
② 单引号只能括住单字节的字符,ASCII 中的所有字符都是单字节,它的有符号范围是 -128 ~ 127
char c = '男'; // 错误,一个汉字占据 3 个字节的存储空间 char d = "A"; // 错误,双引号括起的是字符串 char c = 65; // 正确,这是 ASCII 码
3 - 浮点型
1 - 范围:float 和 double 的范围是由指数的位数来决定的。float 的指数位有 8 位,而 double 的指数位有 11 位
① float
② double
float 的指数范围为 -127 到 +128,而 double 的指数范围为 -1023 到 +1024。指数位是按补码的形式来划分的
③ 精度:float 和 double 的精度是由尾数的位数来决定的,尾数即有效小数位。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的 1,由于它是不变的,所以不能对精度造成影响
float: 2^23 = 838 8608,一共 7 位,这意味着最多能有 7 位有效数字,但绝对能保证的为 6 位,也即 float 的精度为 6~7 位有效数字
double:2^52 = 4503 5996 2737 0496,一共 16 位,就是说 double 的精度为 15~16 位,能绝对保证到 15 位
4 - 代码示例
① 将小写字母转换为大写
char upper(char c){ if(c>='a'&& c<='z') // ASCII码 中 0 - 25 是大写字母,26 - 51 是小写字母 return c-('x'-'X'); else return c; } int main(int argc, const char * argv[]) { char a = upper('b'); printf("%c\n",a);// 输出 B }
② 基本数据类型
1 // int:整型 2 int a = 4; 3 printf("a 的初始值是:%d \n",a); 4 a = 10;// 对 a 重新赋值 5 printf("a 的新值是:%d \n",a); 6 7 int b = 0 ;// 当变量未被初始化则默认为 0 8 printf("未被初始化 b 的默认值是:%d \n",b); 9 10 // short 短整型 11 short x = 2; 12 x = 3; 13 printf("短整型 x 的值是:%d",x); 14 15 // long 长整型类型 16 long y = 4; 17 y = 5; 18 printf("\n长整型 y 的值是:%ld",y); 19 20 21 // float 单精度浮点型 22 float c = 9.8; 23 printf("/nc 的初始值是:%f \t",c);// 9.800000 24 c = 7; 25 printf("c 的新值是%0.2f \n",c);// 7.00(保留两位小数) 26 27 // double 双精度浮点类型 28 double d = 1.234; 29 printf("d 的初始值是:%f \t",d);// 1.234000 30 d = 3.444; 31 printf("d 的初始值是:%f \n",d);// 3.444000 32 33 // 字符型:数字、字母和特殊字符,都可以是字符。 一个字符可以有两种表达形式:字符型(原型)和整型(ASCII 值) 34 char lg = '2' ; 35 printf("lg 的字符值是:%c\nlg字符值对应的整型是:%d\n",lg,lg);// 2 50
③ 互换两个数的值
1 // 方式一 2 int a = 10; 3 int b = 4; 4 printf("a=%d,b=%d\n",a,b); 5 int temp;// 声明一个中间变量来完成两个变量之间的交换 6 temp = a; 7 a = b; 8 b = temp; 9 printf("a=%d,b=%d\n",a,b);
1 // 方式二 2 int a = 10; 3 int b = 4; 4 printf("a=%d,b=%d\n",a,b); 5 6 a = b-a; 7 b = b-a; 8 a = a+b; 9 printf("a=%d,b=%d\n",a,b);
数据类型的大小、取值范围
1 - 因 CPU 差异各系统中的数据类型所占的字节数不同、二进制位数也不同。想要知道自己系统的数据类型的字节数、位数,可以用 sizeof() 关键字
printf("字节 %lu;\n位数 %lu\n", sizeof(int), sizeof(int) * 8);
在 win64 下的数据类型以及取值范围
2 - 取值范围则可以用极限值符号(极限值符号定义在 limits.h 头文件中),以 char 型为例
1 #include <stdio.h> 2 #include<limits.h> 3 int main(int argc, const char * argv[]) { 4 5 printf("MIN %d;\nMAX %d\n", CHAR_MIN, CHAR_MAX); 6 7 return 0; 8 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律