大家好,欢迎来到我的C语言专栏,我会将自己学到的知识以自己的理解分享给大家,希望大家可以和我一起共同进步,从C语言小白一步一步成为大佬
🌈个人主页
📚C语言专栏
👀STM32专栏
文章目录
- 1. 数据类型介绍
- 1.1 整型
- 1.2 字符型
- 1.3 浮点型
- 1.4 布尔类型(C99标准之后引入)
- 1.5 数据类型的长度
- 1.5.1 sizeof操作符
- 1.5.2 各种数据类型的长度
- 1.5.2 sizeof后面的表达式不计算
- 1.2 signed 和 unsigned
- 结语
1. 数据类型介绍
在C语言中,我们写代码的时候经常会使用到各种类型的变量,例如给你一个字母a,你可以给他赋任意值,但是在C语言中,你要是想创建一个变量的话,是要确定它的数据类型的
C语言中的变量有整型(整型数据),字符型,浮点型(小数),想要在C语言中正确的创建变量,它的格式如下
类型名 变量名 = 要赋的值 (如果不初始化,变量的值会是随机值)
接下来让我来给大家介绍一下C语言中的数据类型
1.1 整型
整型是C语言中一种数据类型,顾名思义,它是用来定义整数变量的,整型又可以分为长整型和短整型,有符号型和无符号型(后面会详细讲解)
(signed) int //整型
unsigned int //无符号整型
(signed) short (int) //短整型
unsigned short (int)//无符号短整型
(signed) long (int)//长整型
unsigned long (int)//无符号长整型
(signed) long long (int)//长长整型
unsigned long long (int)//无符号长长整型
//注:long long 类型是C99标准之后引入的
带括号的定义相对应的变量的时候可以省略
1.2 字符型
一个字符变量可以存储一个字符,需要注意的是初始化字符变量的时候需要加上单引号,否则编译器会报错
char//字符型
signed char//有符号字符型
unsigned char//无符号字符型
注:这里的有符号字符型的signed不能省略,它和字符型不完全一样
1.3 浮点型
浮点型是专门用来存储小数的一种数据类型,如果我们需要存储一个小数的话我们就可以定义一个浮点型的变量,浮点型又分为双精度浮点型和单精度浮点型
float//点精度浮点型
double//双精度浮点型
long double // 更长的双精度浮点型
1.4 布尔类型(C99标准之后引入)
_Bool
C 语言原来并没有为布尔值单独设置一个类型,而是使用整数 0 表示假,非零值表示真,在 C99 中也引入了 布尔类型 ,是专门表示真假的。使用布尔类型的变量要包含头文件<stdbool.h>,它的取值只有true和false
1.5 数据类型的长度
在C语言中,每种数据类型都有它相对应的长度,长度不同所能表示的变量的范围也不同
1.5.1 sizeof操作符
sizeof既是关键字也是操作符,是专门用来计算操作数的长度的,它的单位是字节,sizeof的操作数可以是类型名也可以是表达式,如果是表达式的话,它的括号是可以省略的
sizeof (类型)
sizeof 表达式
注:sizeof后面的表达式是不参与真实运算的,它根据表达式的类型来得出大小
sizeof的计算结果是size_t类型的,用printf格式化输出的话用%zd占位符
sizeof 运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long ,甚至是 unsigned long long ,对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。C 语言提供了一个解决方法,创造了一个类型别名 size_t ,用来统一表示 sizeof 的返回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long 。
1.5.2 各种数据类型的长度
1.5.2 sizeof后面的表达式不计算
sizeof后面的表达式是不参与计算的,因为只有在程序开始运行的时候表达式才会开始计算,而sizeof在编译过程中就已经被它的返回值替换掉了,下面给大家举个例子
可以看到,a并没有被sizeof中的表达式影响到,由此进一步的证明了sizeof后面的表达式不计算
1.2 signed 和 unsigned
unsigned 和 unsigned是修饰整型和字符型的,signed修饰的类型带有正负号,可以表示负值,unsigned修饰的类型没有正负号,不能表示负值,对于int类型来说,默认是带有正负号的,等同于signed int ,因此一般情况下signed可以省略不写,使用unsigned的好处是,如果你定义的变量不包含负数,用unsigned就可以使变量的范围扩大一倍
如果听不明白的话我给大家详细的讲解一下,比如说int 的长度是4个字节,1个字节是8个比特位,而每个比特位都用二进制的0或1来表示,4个字节就有32个比特位,因此当32个比特位都为1的话转化成十进制就是232, 如果是signed类型的话,这232个数一般用来表示整数一般用来表示负数,整数的取值范围就是0 ~ (231-1) ,负数的取值范围就是-1 ~ 231, 但如果是unsigned的话,只能表示正数,所以它的取值范围就变成了0~(232-1),其它类型也是一样的
如果我们想要知道变量的取值范围,我们可以在VS的目录下找到limits.h的头文件给出的定义
#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值
unsigned int 中int也可以省略掉
unsigned a;//等同于unsigned int a
在char类型中,char有没有符号是由编译器来决定的,它有可能是signed char也有可能是unsigned char
结语
这次的分享就到这里啦,谢谢你能读到最后,如果本篇文章对你有帮助的话,希望可以留下一个小小的赞,这篇文章是根据我自己的理解来写的,里面可能有写的不对的,还望大佬可以指出,我会尽快改正,如果对本篇文章有什么建议或者问题的话大家可以在下方评论区评论或者私信我,下期给大家详细的讲一讲C语言中的变量,谢谢大家,我们下期文章见❤❤❤