阿林说:“学习如逆水行舟,不进则退。”
学习要养成好习惯,先点赞,后观看!
目录
1. C语言数据类型介绍
C语言提供了多种数据类型,用于存储不同类型的数据。如:整形,浮点型,字符型,布尔类型,void类型等。上图片:
简单的说,整形用来描述整数;浮点型用来描述小数;字符型描述字符;布尔类型描述真假;等等。接下来一一介绍:
1.1字符型(Character Types):
char :通常用于存储字符,如'a','@',可叫做char类型,占用1个字节的内存空间。
char //有符号字符型
[signed] char //有符号字符型,signed表示有符号
unsigned char //无符号字符型,unsigned表示无符号
注:方括号表示可省略
1.2整形(Integer Types):
int
: 通常用于存储整数,如-1,0,1,一般称为整形,占用4个字节的内存空间。
int //有符号整形
[signed] int //有符号整形
unsigned int //无符号整形
注:方括号表示可省略
short int
或 short
: 用于存储较小的整数,如-1,0,1,一般称为短整型,占用2个字节的内存空间。
short //有符号短整型
short [int] //有符号短整型
[signed] short [int] //有符号短整型
unsigned short [int] //无符号短整型
long int
或 long
: 用于存储较大的整数,如-1,0,1,一般称作长整形,占用4个字节的内存空间。
long //有符号长整形
long [int] //有符号长整形
[signed] long [int] //有符号长整形
unsigned long [int] //无符号长整形
long long int
或 long long
: 用于存储更大的整数,如-1,0,1,更长的整形,占用4个字节或8个字节的内存空间。(这里占用内存的大小取决于处理器CPU,若是64位处理器,即x64,占用8个字节的内存;若是32位处理器,即x86,占用4个字节的内存。)
long long //有符号更长的整形
long long [int] //有符号更长的整形
[signed] long long [int] //有符号更长的整形
unsigned long long [int] //无符号更长的整形
1.3浮点型(Floating Point Types):
float, 用于存储含小数的数,有单精度浮点型、双精度浮点型之分。
float //单精度浮点型,可存储小数点后6位,占用4个字节的内存空间
double //双精度浮点型,可存储小数点后12位,占用8个字节的内存空间
long double //用于存储扩展精度浮点数,占用8个字节的内存空间
浮点型变量在运算时必须要有写出小数点后 ,如:
float a = 1.0
float b = a / 1.0
1.4布尔类型
原来c语言中没有单独设置这个类型,C99后设置这个为单独类型, ,布尔类型专门用来表示真假
有两种写法:_Bool或bool
使用布尔类型需要包含头文件<stdbool.h>,布尔类型的变量的取值是true或false
#include<stdbool.h>
#define false 0 //零为假,非零为真
#define true 1
布尔类型的使用如下:
#include<stdio.h>
#include<stdbool.h>
int main()
{
_Bool star = true;
if (star)
{
printf("正确\n");
}
return 0;
}
运行结果:正确
1.5 sizeof操作符
在C语言中,sizeof是一个运算符(而非函数),用于获取数据类型或对象在内存中的大小(以字节为单位)。sizeof返回值是一个size_t类型的值,该类型在头文件<stddef.h>中定义,通常是一个无符号整数类型,能够容纳对象的大小。
sizeof如何使用呢?
1.sizeof( 类型 ) //一种用法是在后面用括号,括号里是某一种类型
2.sizeof 表达式 //另一种用法是后面接表达式,可以是函数等
#include<stdio.h>
int main()
{
int n = 1;
printf("%zd\n", sizeof(n));
printf("%zd\n", sizeof n);
return 0;
因为n是int类型变量,前面我们讲过,int类型的变量占用4个字节的内存空间
(这里的%zd是一个占位符,用来接收sizeof的返回值)
运行结果:4
4
学习了sizeof运算符后,就可以检验前面所说的各种类型的所占空间的大小了
#include<stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(_Bool));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long double));
return 0;
}
在VS2022,x64下,运行代码:
另外,还需要注意的是,sizeof()中的内容,不会真实计算
#include<stdio.h>
int main()
{
int a = 1;
printf("%zd\n", sizeof(a = a + 1));
printf("%d\n", a);
return 0;
}
若a = a + 1进行计算,那么,a就因该是2,而我们可以看到,a的值还是1 ,说明sizeof中的内容不会进行计算,为什么呢?
因为在C语言中,sizeof运算符在编译时计算,因此它返回的是数据类型或对象在编译时可见的大小。 编译时sizeof就有了返回值,所以sizeof后接的内容在真正运行前就结束了,不会进行计算
2.signed 与 unsigned
C 语⾔中使⽤ signed 和 unsigned 关键字来修饰字符型和整型类型。 signed 这个关键字,表⽰⼀个类型带有正负号,包含负值; unsigned 关键字,用来表⽰该类型不带有正负号,只能表⽰零和正整数。 对于 int 类型,默认情况是带有正负号的,也就是说 int 等同于 signed int ,所以关键字 signed ⼀般都省略不写,写了也不算是错误的。
需要关注的是,C 语⾔规定 char 类型默认是否带有正负号,是由当前系统决定的。
3. 数据类型取值范围
每一种类型在内存中所占用的空间是一定的,也就是说,每一种类型都有其取值范围,而limits.h这个头文件说清楚了整型类型的取值范围。为了代码良好的可移植性,在需要知道某种整数类型的极限值时,我们应该尽量使⽤这些常量:
SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值
SHRT_MIN , SHRT_MAX :short 的最⼩值和最⼤值
INT_MIN , INT_MAX :int 的最⼩值和最⼤值
LONG_MIN , LONG_MAX :long 的最⼩值和最⼤值
LLONG_MIN , LLONG_MAX :long long 的最⼩值和最⼤值
UCHAR_MAX :unsigned char 的最⼤值
USHRT_MAX :unsigned short 的最⼤值
UINT_MAX :unsigned int 的最⼤值
ULONG_MAX :unsigned long 的最⼤值
• ULLONG_MAX :unsigned long long 的最⼤值
最后,
阿林说:“学习要循循渐进,不能一蹴而就。”