数据类型
数据类型分为两大类:基本数据类型、用户自定义数据类型
基本数据类型
1、char
(1)、char-- 字符型 – 1字节
(2)、char用于表示字符,例如:‘?’ ‘a’ ’ ’ ‘>’
(3)、注意:在C语言中字符常量用单引号表示
(4)、char类型可以表示ASCII码中的字符,也可以表示Unicode字符。
(5)、char可以分为有符号和无符号两种类型。
- signed
signed cha:有符号字符型数据 //signed可以省略
取值范围: -128 ~ 127 或 -2^7 ~ 2^7-1
一共8位数据,signed类型的数据的最高位都是符号位,符号位为0(正数),为1(负数)
例:
char ch1 = 'A'; //声明并初始化一个字符变量
char ch2 = 'B';
char ch3 = '中';
printf("ch1 = %c, ch2 = %c, ch3 = %c\n", ch1, ch2, ch3); //输出变量的值
- unsigned
unsigned char:无符号字符型数据
取值范围: 0 ~ 255 或 0 ~ 2^8-1
unsigned char ch1 = 'A'; //声明并初始化一个字符变量
unsigned char ch2 ='B';
unsigned char ch3 = '中';
printf("ch1 = %c, ch2 = %c, ch3 = %c\n", ch1, ch2, ch3); //输出变量的值
-
所有数据在内存中存储都是以补码的方式存储
-
所有数据运算都要以补码方式运算
-
原码:数据本身对应的二进制
-
反码:原码取反
-
正数的补码等于:本身
-
负数的补码等于:原码取反+1
-
补码 == ~源码+1
-
源码 == ~(补码-1) == ~补码+1
-
特殊的: 1000 0000 == -128
2、int
int – 整型 – 4字节
- signed:有符号(可正可负)
signed int a; //定义了一个有符号的整型数据, signed可以省略
取值范围:-2^31 ~ 2^31-1
int num; //声明一个整型变量
num = 10; //初始化变量num的值为10
int sum = num + 20; //计算num加20的结果并赋值给sum
int num1 = 10; //声明并初始化一个整数变量
int num2 = -5;
printf("num1 = %d, num2 = %d\n", num1, num2); //输出变量的值
- unsigned:无符号(正整数)
取值范围:0 ~ 2^32-1
unsigned int a; //定义一个无符号的整型数据
3、float
(1)、float – 单精度浮点型 – 4字节
(2)、单精度浮点型,用于表示带有小数点的数值,通常占用4字节。
(3)、它适用于需要较小精度要求的场景,如科学计算、图形处理等。然而,由于浮点数的精度问题,需要在使用时注意其取值范围和舍入误差,以避免精度丢失。
(4)、精度:小数点后6-7位
例如:
float weight = 68.5; //声明并初始化一个浮点型变量
float height = 1.75;
float bmi = weight / (height * height); //计算BMI指数
4、double
(1)、double – 双精度浮点型 – 8字节
(2)、双精度浮点型,用于表示更高精度的带有小数点的数值,通常占用8字节(64位)。
(3)、它适用于需要较高精度要求的场景,如金融计算、物理模拟等。使用double类型时,需要注意其精度和范围,并合理处理舍入误差。
(4)、精度:小数点后15-16位
例如:
double balance = 1000.50; //声明并初始化一个双精度浮点型变量
double rate = 0.05;
double interest = balance * rate; //计算利息
float num1 = 3.14; //声明并初始化一个单精度浮点数变量
double num2 = 2.71828; //声明并初始化一个双精度浮点数变量
printf("num1 = %f, num2 = %lf\n", num1, num2); //输出变量的值
需要注意的是,浮点数在计算时可能存在舍入误差,因此在比较浮点数时应谨慎使用直接比较操作符,而应使用误差范围内的比较方式。
5、bool
(1)、bool类型的逻辑值表示bool是C语言中的布尔类型,用于表示逻辑值,即真(True)或假(False)。
(2)、bool类型在C语言中是通过stdbool.h头文件引入的,通常用于条件判断、循环控制等逻辑运算场景。
例如:
bool flag1 = true; //声明并初始化一个布尔变量
bool flag2 = false;
printf("flag1 = %d, flag2 = %d\n", flag1, flag2); //输出变量的值,true用1表示,false用0表示
需要注意的是,bool类型在C语言中并不是原生的数据类型,而是通过stdbool.h头文件定义的宏,true和false实际上是预定义的宏,其值分别为1和0。
6、short
(1)、short – 短整型 – 2字节
(2)、short类型用于表示较小范围的整数,通常占用2个字节(16位)的存储空间。其取值范围和存储空间大小因编译器和操作系统的不同而有所变化。
(3)、一般情况下,short类型的取值范围在-32,768到32,767之间,可以用来节省存储空间,在对存储空间有限的嵌入式系统和低功耗设备中比较常见。
例如:
short num1 = 100; //声明并初始化一个short类型变量
short num2 = -200;
printf("num1 = %hd, num2 = %hd\n", num1, num2); //输出变量的值
7、long - 长整型
(1)、long - 长整型 - 4字节(32位)或8字节(64位)
(2)、long类型用于表示较大范围的整数,通常占用4个字节(32位)或8个字节(64位)的存储空间,取决于编译器和操作系统的位数。其取值范围也因此而不同,在32位系统中,long类型的取值范围一般为-2^31~2 ^31 - 1;
(3)、而在64位系统中,long类型的取值范围可以更大。
例如:
long num1 = 10000L; //声明并初始化一个long类型变量,后缀L表示长整型常量
long num2 = -2000000L;
printf("num1 = %ld, num2 = %ld\n", num1, num2); //输出变量的值,%ld用于格式化长整型
需要注意的是,long类型的存储空间和取值范围可能因编译器和操作系统的不同而有所变化,因此在使用long类型时,应j注意兼容性和可移植性的问题。