目录
1. 数据类型大盘点
前言:C语⾔为我们提供了丰富的数据类型来描述我们⽣活中的各种数据
比如我们可以使用整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。
所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
下⾯盘点⼀下C语⾔提供的各种数据类型,本章节主要探讨内置数据类型。
下⾯我们就来盘点⼀下C语⾔提供的各种数据类型吧,本章节主要探讨内置数据类型。(内置类型指C语言自身带有的类型,不可创造。自定义类型是指可由程序员创造的类型)
1.1 字符型
1. char //全称character
2.[signed] char //有符号的char
3.unsigned char //⽆符号的char
1.2 整型
有四类,包括: 基本整型 int
短整型 short int
长整型 long int
双长整型 long long int (C99中才引⼊的)
下面是扩展类型
•短整型
1,short [int]
2,[signed] short [int] //有符号的短整型
3,unsigned short [int] //无符号的短整型
•整型
1,int
2,[signed] int //所有编译器都自动将int等效为signed int
3,unsigned int //无符号的整型
•⻓整型
1,long [int]
2,[signed] long [int] //有符号的长整型
3,unsigned long [int] //无符号的长整型
•更⻓的整型 (C99中引⼊)
1,long long [int]
2,[signed] long long [int] //有符号的双长整型
3,unsigned long long [int] //无符号的双长整型
1.3 浮点型
1,float //单精度浮点型
2,double //双精度浮点型
3,long double //高精度浮点型
1.4 布尔类型
原先C语言使⽤整数 0 表⽰假,⾮零值表⽰真,后来为了方便,在C99中引⼊了 布尔类型 ,是专⻔表⽰真假的。
在C99中引入的是“_Bool”形式,后来为了好写改成了“bool”形式。也就是说以上两种形式的可以使用。
布尔类型的使⽤得包含头⽂件 <stdbool.h>
布尔类型变量的取值是: true 或者false
代码演⽰:
1 _Bool flag = true;
2 if (flag)
3 printf("i like C\n");
2. 各种数据类型的⻓度
每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。
2.1 sizeof 操作符
介绍:sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。
sizeof操作符的操作数可以是类型,也可是变量或者表达式。所写形式不同,如下
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
sizeof 的计算结果是== size_t== 类型的
2.2 数据类型长度
#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;
}
在VS2022X64配置下的输出:
1 //单位:字节
1 //单位:字节
2 //单位:字节
4 //单位:字节
4 //单位:字节
8 //单位:字节
4 //单位:字节
8 //单位:字节
8 //单位:字节
2.3 字节单位换算
在2进制中,每一个数字占用一个比特位(bit),比如“ 10 ”占两个比特位。8个比特位组成1个字节(Byte)。
1 Byte = 8 bit
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB
1024 = 210
2.4 sizeof 中表达式不计算
//测试:sizeof中表达式不计算
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%d\n", sizeof(s = b+1));
printf("s = %d\n", s);
return 0;
}
sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。