网站首页 > 文章精选 正文
C 语言中的数据类型可分为如下几种:
- 基本类型:字符类型、整数类型、浮点数类型、布尔类型、枚举类型
- void类型
- 指针类型
- 构造类型:数组、结构体、公用体
这里我们介绍下基本类型,其他几种类型会在后边几个章节中进行讲解。
一、字符类型与整数类型
字符类型或整数类型所占存储空间的字节大小:
类型 | Linux 32 | Linux 64 |
char | 1 | 1 |
short [int] | 2 | 2 |
int | 4 | 4 |
long [int] | 4 | 8 |
long long [int] | 8 | 8 |
字符类型 char 在内存中存储的本质与整数类型是相同的,只是存储大小不同。char 类型可以表示的字符集通常是 ASCII 字符集。
实际上,C语言并没有严格规定 short、int、long 的长度,只做了宽泛的限制:short 的长度不能大于 int,long 的长度不能小于 int。而这些类型的具体大小是由各个操作系统及编译器决定的。
下面我们在代码里实测一下在 linux 64 位系统下,每个类型的具体大小:
#include <stdio.h>
int main()
{
printf("char: %ld\n",
sizeof(char)); // 1
printf("short: %ld\n",
sizeof(short)); // 2
printf("int: %ld\n",
sizeof(int)); // 4
printf("long: %ld\n",
sizeof(long)); // 8
printf("long long: %ld\n",
sizeof(long long)); // 8
return 0;
}
整数类型又分为有符号整数和无符号整数。有符号整数可以表示正数、负数和零,而无符号整数只能表示正数和零,使用 signed 与 unsigned 关键字标识。
整数类型默认是有符号类型,但 char 比较特殊,其默认是 signed 还是 unsigned 由编译器决定。
#include <stdio.h>
#include <limits.h>
int main()
{
/* 有符号或无符号 char */
printf("char Min: %d\n", CHAR_MIN);
printf("char Max: %d\n", CHAR_MAX);
/* 有符号 char */
printf("signed char Min: %d\n", SCHAR_MIN);
printf("signed char Max: %d\n", SCHAR_MAX);
/* 无符号 char */
printf("unsigned char Max: %u\n", UCHAR_MAX);
printf("signed short Min: %d\n", SHRT_MIN);
printf("signed short Max: %d\n", SHRT_MAX);
printf("unsigned short Max: %u\n", USHRT_MAX);
printf("signed int Min: %d\n", INT_MIN);
printf("signed int Max: %d\n", INT_MAX);
printf("unsigned int Max: %u\n", UINT_MAX);
printf("signed long Min: %ld\n", LONG_MIN);
printf("signed long Max: %ld\n", LONG_MAX);
printf("unsigned long Max: %lu\n", ULONG_MAX);
printf("signed long long Min: %lld\n", LLONG_MIN);
printf("signed long long Max: %lld\n", LLONG_MAX);
printf("unsigned long long Max: %llu\n", ULLONG_MAX);
return 0;
}
$ gcc test.c && ./a.out
char Min: -128
char Max: 127
signed char Min: -128
signed char Max: 127
unsigned char Max: 255
signed short Min: -32768
signed short Max: 32767
unsigned short Max: 65535
signed int Min: -2147483648
signed int Max: 2147483647
unsigned int Max: 4294967295
signed long Min: -9223372036854775808
signed long Max: 9223372036854775807
unsigned long Max: 18446744073709551615
signed long long Min: -9223372036854775808
signed long long Max: 9223372036854775807
unsigned long long Max: 18446744073709551615
二、浮点类型
浮点类型所占存储空间的字节大小:
类型 | Linux 32 | Linux 64 |
float | 4 | 4 |
double | 8 | 8 |
long double | 12 | 16 |
下面我们在代码里实测一下在 linux 64 位系统下,浮点类型的具体大小与范围:
#include <stdio.h>
#include <float.h>
int main()
{
printf("float Size: %ld\n", sizeof(float));
printf("float Min: %e\n", FLT_MIN);
printf("float Max: %e\n", FLT_MAX);
printf("double Size: %ld\n", sizeof(double));
printf("double Min: %e\n", DBL_MIN);
printf("double Max: %e\n", DBL_MAX);
printf("long double Size: %ld\n", sizeof(long double));
printf("long double Min: %Le\n", LDBL_MIN);
printf("long double Max: %Le\n", LDBL_MAX);
return 0;
}
$ gcc test.c && ./a.out
float Size: 4
float Min: 1.175494e-38
float Max: 3.402823e+38
double Size: 8
double Min: 2.225074e-308
double Max: 1.797693e+308
long double Size: 16
long double Min: 3.362103e-4932
long double Max: 1.189731e+4932
三、类型转换
C 语言中有两种类型转换:
- 隐式类型转换:隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型,例如,将 int 转换为 long 或 float 转换为 double 。
- 显式类型转换:显式类型转换需要使用强制类型转换运算符(),它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。
#include <stdio.h>
int main()
{
/* 隐式类型转换 */
int i = 10;
float f = 3.14;
// 隐式将 int 类型转换为 double 类型
double d = i + f;
printf("d = %f\n", d);
/* 显式类型转换 */
double e = 3.1415926;
// 显式将 double 类型转换为 int 类型
int g = (int) e;
printf("g = %d\n", g);
return 0;
}
猜你喜欢
- 2025-01-05 PHP源码系列之扩展的原理与开发
- 2025-01-05 「linux」多个套接字可以绑定同一个端口吗
- 2025-01-05 基于netmap的用户态协议栈(一)
- 2025-01-05 Linux文件:超级块inode dentry file关系
- 2025-01-05 实战Netty!基于私有协议,怎样快速开发网络通信服务
- 2025-01-05 char, unsigned char,之间的相互转换
- 2025-01-05 PHP 扩展与 ZEND 引擎的整合
- 2025-01-05 C语言:位域和字节序
- 2025-01-05 Nor Flash的两种规范
- 2025-01-05 「技术干货」Ip头udp数据包ARP协议(代码实现netmap)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)