C语言 |【耗费一夜总结三本C语言系列】之 数据类型总结

前言👦

本章结内容将结合3本C语言书籍进行总结归纳,讲述数据的基本类型,数据类型的使用、范围,在何时该使用哪个数据类型较为合适。

在这里插入图片描述


C语言 | 快速了解C的发展史🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 指针、数组 一文透彻~~~🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 结构体、联合、枚举🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 声明🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 作用域 在也不用担心分不清变量的作用域拉!!!🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 编译步骤 会用C还不知道C如何编译???🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 数据类型总结🧡💛💚💙
C语言 | 【耗费一夜总结三本C语言系列】之 位及进制的用法🧡💛💚💙


一、C的数据类型有哪些?是什么?🥴

C语言有且仅有4中数据类型:

  • 整型;
  • 浮点型;
  • 指针;
  • 聚合类型;
  • 其他类型:都由以上四种类型的衍生出来的。

1.1 数据类型关键字

intlongshortcharfloatdoubleunsignedsigned(C90)、void(C90)、_Bool(C99)、_Complex(C99)、_Imaginary(C99);

查看大小

#include<stdio.h>
#include<stdlib.h>

int main(){
	printf("int:%d bytes\n", sizeof(int));
	printf("char:%d byte\n", sizeof(char));	/* char型的字节数为1 */
	printf("short:%d bytes\n", sizeof(short));	/* short型的字节数为2 */
	printf("long:%d bytes\n", sizeof(long));	/* long型的字节数为4 */
	printf("float:%d bytes\n", sizeof(float));	/* float型的字节数为4 */
	printf("double:%d bytes\n", sizeof(double));	/* double型的字节数为8 */
	printf("long double:%d bytes\n", sizeof(long double));	/* long double型的字节数为8或10或12 */

	system("pause");
	return 0;
}

在这里插入图片描述

那么我们就按照以上的类型展开…【注:指针和聚合这个俩个的内容较多,后续会单独总结一篇】

二、数据类型介绍😲

1.1 整型数据类型

整型包括字符、短整型、整型、长整型。【有些同学可能会感到疑惑为何字符属于整型类型呢???】因为计算机使用的是数字编码。常用的是ASCII编码,使用特殊的整数表示特定的字符。在例如后续会学到的文件读取函数读取到的都是字符,返回的基本都为int类型,以EOF(-1)为标志。

1.1.1 int类型

使用

使用前必须声明;

int i;
int k,j;
int m=10;

查看整型大小

  • int型长度不仅与具体的CPU架构有关,而且与编译器有关。
  • int型长度的确定有三个准则:
    • ① C/C++规定int字长机器字长相同;
    • ② 操作系统字长机器字长未必一致;(前者小于等于后者)
    • ③ 编译器根据操作系统字长来定义int字长
#include<stdlib.h>
#include<stdio.h>
#include<limits.h>
int main(){
	printf("最小(有符号)整型:%d\n", INT_MIN);
	printf("最大(有符号)整型:%d\n", INT_MAX);
	printf("最大(无符号)整型:%d\n", UINT_MAX);

	system("pause");
}

在这里插入图片描述

了解字是什么

  • 字是设计计算机时给定的自然存储单元
  • 它与位、字节是描述计算机数据单元或存储单元的术语;
  • 1字长只有8位,直至今日出现了64位;
  • 字长越长,则计算机数据传输越快,允许访问的内存越多。
1.1.2 short类型

占用的存储空间可能比int类型少,适用于较小数值的场合以节省空间;

查看短整型大小

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int main(){
	printf("最小(有符号)短值:%d\n", SHRT_MIN);
	printf("最大(有符号)短值:%d\n", SHRT_MAX);
	printf("最大(无符号)短值:%d\n", USHRT_MAX);

	system("pause");
}
1.1.3 long类型

占用的存储空间可能比int多,适用于较大的数值场合;

查看长整型大小

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>



int main(){
	// 长整型
	printf("--------------------------------------------\n");
	printf("最小(有符号)长整型:%d\n", LONG_MIN);
	printf("最大(有符号)长整型:%d\n", LONG_MAX);
	printf("最大(无符号)长整型:%d\n", ULONG_MAX);

	// 长长整型
	printf("--------------------------------------------\n");
	printf("最小(有符号)长长整型:%d\n", LLONG_MIN);
	printf("最大(有符号)长长整型:%d\n", LLONG_MAX);
	printf("最大(无符号)长长整型:%d\n", ULLONG_MAX);

	system("pause");
}

在这里插入图片描述

有了long类型为何还有longlong类型呢?

由于目前计算机普遍是64位处理器,为了存储64位整数,才将此引入;
较为常见的:long long(64位)long(32位)short(16位)int(16位/32位)

11.4 signed与unsigned关键字

signed:[可选] 可在任何有符号的关键字前添加声明,起强调作用,包括负数。
unsigned:[必] 若要表示无符号则需要关键字前添加,只有0和正数;

1.1.5 char类型
  • 为了容纳字符串型值,存储字母或标点符号;
  • 存储在8位的存储单元。
#include<stdio.h>
#include<stdlib.h>

int main(){
	char a = 'AXDF';		// 存储在8位的存储单元
	printf("ret: %c\n", a);

	system("pause");
}
// 由于存储单元为8位,则只有最后8位单元有效

在这里插入图片描述

查看字符型大小

#include<limits.h>
#include<stdio.h>
#include<stdlib.h>

int main(){
	printf("一个字符的位数:%d\n", CHAR_BIT);
	printf("最小(有符号)字符类型:%d\n", SCHAR_MIN);
	printf("最大(有符号)字符类型:%d\n", SCHAR_MAX);
	printf("最大(无符号)字符类型:%d\n", UCHAR_MAX);

	system("pause");
}

在这里插入图片描述

1.1.6 _Bool类型

通常用来进行逻辑判断,即true和false,仅占1位存储空间;

1.1.7 _Complex类型

表示复数:float_Complexdouble_Complexlong double_Complex

1.1.8 _Imaginary类型

表示虚数:float_Imaginarydouble_Imaginarylong double_Imaginary

1.1.9 注意事项:
  • 不能通过字面意思理解,长整型必须比短整型长,在标准中并无规定,但不能比短整型短
  • 长整型至少应该和整型一样长,而整型至少应该和短整型一样长
  • 尽量不要在代码中使用无符号类型,即使表示的数据是不存在负值;
  • 一般只有在使用位段和二进制掩码时,才可以用无符号数;

1.2 浮点型数据类型

1.2.1 float类型
  • 浮点类型,通常是实际值的近似值。如10.0可能存储位9.99999;
  • 一般可精确到至少6位有效数字,范围一般在与10-37~10+37

计数法

  • 数字:12.123;
  • 科学计数法:1.2x107
  • 指数计数法:1.2e7;
#include<stdio.h>
#include<stdlib.h>

int main(){
	float f = 112.231;
	printf("%f\n", f);
	printf("%e\n", f);
	system("pause");
}

查看float范围

#include<stdio.h>
#include<stdlib.h>
#include <float.h>

int main(){
	printf("最小float值:%e\n", FLT_MIN);
	printf("最大float值:%e\n", FLT_MAX);
	system("pause");
	return 0;
}

在这里插入图片描述

1.2.2 double类型
  • 为双精度,占64位,提高了精度;
  • 至少能表示10位有效数字;
  • 还有long double以适应更高精度的需求;

查看double范围

#include<stdio.h>
#include<stdlib.h>
#include <float.h>

int main(){
	printf("最小double值:%e\n", DBL_MIN);
	printf("最大double值:%e\n", DBL_MAX);
	system("pause");
	return 0;
}

在这里插入图片描述

三、使用中关乎到可移植性的问题

为了统一在各个系统中某些类型的功能相同。1999年,ANSI推出了C99新增了头文件stdint.hinttypes.h

所以,在开发过程中为了避免在移植的过程中出现问题,因尽量使用该俩个头文件来定义变量;

3.1 头文件stdint.h简介

typedef 定义类型无符号类型描述
intmax_tuintmax_t最大宽度的整数类型
int8_tuint8_t宽度为8位的整数类型,有符号类型则负值使用 2 的补码表示
int16_tuint16_t宽度为16位的整数类型,有符号类型则负值使用 2 的补码表示
int32_tuint32_t宽度为32位的整数类型,有符号类型则负值使用 2 的补码表示
int64_tuint64_t宽度为64位的整数类型,有符号类型则负值使用 2 的补码表示
int_least8_tuint_least8_t最小8位的整数类型
int_least16_tuint_least16_t最小16位的整数类型
int_least32_tuint_least32_t最小32位的整数类型
int_least64_tuint_least64_t最小64位的整数类型
int_fast8_tuint_fast8_t最小8位的整数类型
int_fast16_tuint_fast16_t最小16位的整数类型
int_fast32_tuint_fast32_t最小32位的整数类型
int_fast64_tuint_fast64_t最小64位的整数类型
intptr_tuintptr_t整数类型,能够保存从void指针转换而来的值,然后将其转换回与原始指针相等的值的类型

3.2 可移植代码应遵循以下标准

  • 只使用已确定的特性;
  • 不突破任何由编译器实现的限制;
  • 不产生任何依赖由编译器定义的或未确定的或未定义的特性的输出。

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值