整数与浮点数
按计算机的储存方式数据类型可分为两大基本类型: 整数类型和浮点数类型。
整数类型
整数类型根据占用的内存空间分为:int型、short型、long型、long long型以及char型。根据是否带正负号以上数据类型又可分为:unsigned型、signed型。
一. 基本整数型:int
int型是基本整数型,能满足大多数情况下计算机对整数的储存、描述。int型是有符号整型,可以是正整数、 负整数或零。一般而言, 储存一个int要占用一个机器字长,如32位系统int型占4字节。
1. int型变量的声明、初始化、打印
int main()
{
int a,b;// int型变量的声明:int + 变量名(可同时声明多个变量,使用‘,’分开) + ';'。
a=0;// int型变量的初始化:int型变量名 + ‘=’ + 右值(可为常量或int型函数返回值)。
b=1;
int c=2; // int型变量声明并初始化:声明时同时初始化为一个初始值。
printf("a=%d,b=%d,c=%d",a,b,c);// int型变量的打印:使用printf函数、%d进行int变量的十进制显示打印。
return 0;
}
编译并运行输出如下:a=0,b=1,c=2
2. int型变量占用空间
int main()
{
int a=0;// 定义并初始化int函数
// 使用sizeof关键字计算int型变量占用内存空间大小
printf("sizeof(a)=%d,sizeof(int)=%d\n",sizeof(a),sizeof(int));
// 打印int型变量可储存数据大小范围
a = 2147483647;
printf("a=%d,a+1=%d,a+2=%d\n",a,a+1,a+2);
return 0;
}
编译并运行输出如下:
sizeof(a)=4,sizeof(int)=4
a=2147483647,a+1=-2147483648,a+2=-2147483647
从打印可看出:1、int型占4字节;2、int型可储存整数范为:-2147483648~2147483647;3、数据溢出后自动从数据起点算起即从最小值算起。
二. 其他整数型:short、long、long long以及unsigned
C语言提供关键字如short、long、unsigned用于修饰int,使得计算机获得更多的数据存储类型,用于更合理、方便的描述生活中的问题。其中unsigned修饰int时int一般不省略,unsigned同样也可以修饰short、long等整数类型,表明为非符号整形。
1. 其他整数型变量的声明、初始化、打印
int main()
{
// 与int型变量的声明方法相同:变量类型 + 变量名(可同时声明多个变量,使用‘,’分开) + ';'。
short a=10;
long b=50000;
long long c=5000000;
unsigned int d=1000;
// 形式与int型变量的打印相同但数据类型需对应变化:
// 使用printf函数、%hd进行short变量的十进制显示打印。
// 使用printf函数、%ld进行long变量的十进制显示打印。
// 使用printf函数、%lld进行long long变量的十进制显示打印。
// 使用printf函数、%ud进行unsigned变量的十进制显示打印。
printf("a=%hd,b=%ld,c=%lld,d=%u",a,b,c,d);
return 0;
}
编译并运行输出如下:a=10,b=50000,c=5000000,d=1000
2. 其他整数型变量占用空间(32位系统)
int main()
{
short a=0;
long b=0;
long long c=0;
unsigned int d=0;
// 使用sizeof关键字计算变量占用内存空间大小
printf("sizeof(short)=%d\n",sizeof(short));
printf("sizeof(long)=%d\n",sizeof(long));
printf("sizeof(long long)=%d\n",sizeof(long long));
printf("sizeof(unsigned int)=%d\n",sizeof(unsigned int));
return 0;
}
编译并运行输出如下:
sizeof(short)=2
sizeof(long)=4
sizeof(long long)=8
sizeof(unsigned int)=4
三. 字符类型:char
char类型用于储存字符(如, 字母或标点符号) , 但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。
1. char型变量的声明、初始化、打印
int main()
{
char a1,a2;// char型变量的声明:char + 变量名(可同时声明多个变量,使用‘,’分开) + ';'。
a1='A';// char型变量的初始化:int型变量名 + ‘=’ + 右值(可为整数常量或字符常量、char型函数返回值)。
a2=65;
// char型变量的打印:使用printf函数、%c进行char变量的字符显示打印,%d进行十进制显示打印。
printf("a1=%c,num_a1=%d,a2=%d,char_a2=%c",a1,a1,a2,a2);
return 0;
}
编译并运行输出如下:a1=A,num_a1=65,a2=65,char_a2=A
通过打印可知整型变量储存字符时储存的是整数。
2. char型变量占用空间
int main()
{
char a=0;// 定义并初始化char函数
// 使用sizeof关键字计算cahr型变量占用内存空间大小
printf("sizeof(a)=%d,sizeof(char)=%d\n",sizeof(a),sizeof(char));
// 打印int型变量可储存数据大小范围
a = 255;
printf("a=%d,a+1=%d,a+2=%d\n",a,a+1,a+2);
return 0;
}
编译并运行输出如下:
sizeof(a)=1,sizeof(char)=1
a=255,a+1=0,a+2=1
从打印可看出:1、char型占1字节;2、char型可储存整数范有些编译器将char型实现为无符号型:0~255,有些编译器实现为有符号型-128-127;3、数据溢出后自动从数据起点算起即从最小值算起。
浮点类型
浮点类型即通常理解的小数,如3.14/5.28/99.8等,为存储浮点数C语言规定了以下浮点类型的变量:float、double、long double。
1.浮点类型的声明、初始化、打印
int main()
{
// 浮点类型变量的声明:浮点类型名+ 变量名(可同时声明多个变量,使用‘,’分开) + ';'。
float f1 = 3.14f;
double f2 = 99.8;
long double f3 = 100.1;
// 浮点类型变量的打印:使用printf函数、%f/%lf进行浮点类型变量的字符显示打印。
printf("f1=%f,f2=%f,f3=%lf", f1, f2, f3);
return 0;
}
编译并运行打印结果如下:f1=3.140000,f2=99.800000,f3=100.100000
2.浮点类型的占用内存
int main()
{
// 浮点类型变量的声明:浮点类型名+ 变量名(可同时声明多个变量,使用‘,’分开) + ';'。
float f1 = 3.14f;
double f2 = 99.8;
long double f3 = 100.1;
// 浮点类型变量占用内存的打印:使用printf函数、sizeof进行浮点类型变量占用内存打印。
printf("sizeof(float)=%d,sizeof(double)=%d,sizeof(long double)=%d", sizeof(float), sizeof(double), sizeof(long double));
return 0;
}
编译并运行打印结果如下:sizeof(float)=4,sizeof(double)=8,sizeof(long double)=8
总结与拓展
1.基本数据类型的存储方式
整数:计算机以二进制116数字储存整数, 例如, 整数7以二进制写是111。
当整数定义为有符号整数型时规定使用第一位为符号为其余位为数值位,如有符号char型最大存储为[-128,127]即2的7次方,无符号char型存储范围为[0,255]即2的8次方。
浮点类型的存储分位符号位、小数位、指数位
浮点类型的存储规定了第一位为符号位,因此不使用unsigned或signed来修饰浮点类型。