C语言 基本类型详述char short int long long long float double (一篇搞懂所有基本类型)

您所在的位置:网站首页 float类型占内存空间 C语言 基本类型详述char short int long long long float double (一篇搞懂所有基本类型)

C语言 基本类型详述char short int long long long float double (一篇搞懂所有基本类型)

2023-09-08 22:14| 来源: 网络整理| 查看: 265

目录 C语言基本类型详述整型和浮点型总概位、字节和字 整型和浮点型整型浮点型

C语言基本类型详述

为什么在用计算机计算时要指定数据类型呢?在数学中,数值是不分类型的,数值的运算是绝对准确的,数学是一门抽象的学科,数和数的运算都很抽象的。而在计算机中,数据是存放在存储单元中的,他是具体存在的。而且,存储单元是由有限的字节构成的,每一个存储单元中存放的数据范围是有限的,不可能存放“无穷大”的数,也不能存放循环小数。由计算机进行的计算不是抽象的理论值的计算,而是用工程的方法实现的计算,在许多情况下只能得到近似的结果。 所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。C通过识别一些基本的数据类型来区分和使用这些不同的数据类型。

C语言允许使用的类型大概有13种。(本文基于VS2010,32位程序平台) 在这里插入图片描述

整型和浮点型总概

最初K&C(经典C)标准给出了7个与类型相关的关键字。本篇文章重点针对他们进行说明。包括整数和浮点数。

类型字节数取值范围(无符号)输出格式(signed)char(字符型)10~(2^8-1)%c(字符) %s(字符串)short(短整型)20~(2^16-1)%hdint(基本整型)40~(2^32-1)%dunsigned无符号整型)40~(2^32-1)%ulong(长整型)40~(2^32-1)%ldlonglong(双长整型)80~(2^64-1)%lldfloat(单精度浮点型)40~(2^32-1)%fdouble(双精度浮点型)80~(2^64-1)%lf

按计算机的储存方式可分为两大基本类型:整数类型和浮点数类型。 在不同系统上,部分数据类型长度不一样。

位、字节和字

位、字节和字是描述计算机数据单元或存储单元的术语,本文主要指存储单元。

比特位:即bit,是计算机最小的存储单位。可以储存0或1(或者说位用于设置“开”和“关”)。虽然1位储存的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构件块。

字节:即Byte,通常用作计算机信息计量单位,计算机存储单位。对于几乎所有的机器1字节均为8位。可以表示0-255(0~(2^8-1))的整数或一组字符。

字:即word,是设计计算机时给定的自然存储单位。对于8位的微型计算机(如最初的苹果机),1个字长只有8位。从那以后,个人计算机字长增至16位,32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许内存访问也更多。

char类型字符型 在计算机中,使用数字编码来处理字符,即用特定的整数表示特定的字符。最常用的是ASCII(美国信息交换标准代码)。标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常,char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。 C中,单引号的引起来的数据默认为char型。 ***在C语言中,没有字符串类型,使用字符数组表示字符串。***比如:char ch[].

***打印字符***printf()函数用%c指明待打印的字符,一个字符变量实际上被储存为1字节的整数值。因此,如果用%d转换说明打印char类型变量的值,打印的是一个整数。而%c说明告诉printf()打印该整数对应的字符。

#include int main() { char ch = 67; printf("the code for %c is %d\n",ch, ch); return 0; }

运行结果为:

the code for C is 67

如果要打印字符串,则需要输出格式%s。

//char ch1 = 'weieee';//char 单引号内只能定义一个字符,常量中字符太多会出现错误语法错误 char ch2 = 'c'; char ch3[] = "C语言"; printf ("ch2--%c, ch3--%s\n", ch2, ch3);

输出:

ch2--c, ch3--C语言 请按任意键继续. . .

在这里插入图片描述

在这里插入图片描述

整型和浮点型 整型

和数学的概念一样,C语言把不含小数点和指数的数作为整数。

int类型(基本整型)是有符号的整型,即int类型的值必须是整数,可以是正整数,负整数或零。编译系统分配给int型数据4个字节。其取值范围是-2147483648~2147483647。(初学C语言时,int类型应该能满足大多数程序的整数类型需求)

测int型的大小。

printf("int 型在本机的字节数为:%d", sizeof (int));

输出:

int 型在本机的字节数为:4请按任意键继续. . .

初始化变量(其他基本类型变量初始化大同小异)

int fir = 99; int sec = 999, thi = 9999; int fou, fif= 99999;//有效,但不建议 //最后一行,fou和fif都声明了,但只初始化了fif

C语言提供了3个附属关键字修饰基本整数类型:short、long和unsigned。 C语言规定了short占用的存储空间不能多于int,long占用的存储空间不能少于int。

short类型(短整型)占用的存储空间可能比int类型少,常用于较小数值的场合以省空间。与int相似,short是有符号类型。

long类型(长整型)占用的存储空间可能比int多,适用于较大数值场合。与int相似,short是有符号类型。

longlong类型(双长整型)(C99标准加入)占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位,与int相似,short是有符号类型。

unsigned(无符号类型)只用于非负值的场合,这种类型与有符号的表示范围不同。格式符为%u。例如:16位的unsigned int允许的取值范围是:0~65535。用于表示正负号的位现在用于表示另一个二进制位,所以,无符号整型可以表示更大的数。在任何有符号的类型前面添加关键字signed,可强调使用有符号类型的意图。例如,short、signed short表示同一种类型。***C语言默认为“有符号类型”***。 有符号整形数据存储单元中最高位代表符号(0为正,1为负)。如果指定unsigned型,存储单元中全部二进制位存放数值本身,而没有符号位。无符号型变量只能存放不带符号的整数,不能存放负数。 由于左面的最高位不在表示符号,用来表示数值,因此,无符号变量比有符号变量范围扩大一倍。 注意:C中,默认在int型范围内不带小数点的数都作为int型,分配4个字节;超出int型的整数而又在long long型数范围内的整数作为long long型处理。在常量的末尾加专用字符,强制指定常量的类型。在一个整数末尾加大写字母L或小写字母l,表示它是长整型(long),分配4个字节。 在整形输出格式前,加0.n,比如:0.2或.2。表示输出时占几位,通常在要定义数字前面加0。

int num1 = 564; long num2 = 564; char num3 = 564; printf ("num1 = %.5d num2 = %.5d num3 = %.5d",num1, num2, num3);

输出:

num1 = 00564 num2 = 00564 num3 = 00052请按任意键继续. . .

整数溢出

#include int main() { int i =2147483647; unsigned int j =4294967295; printf("%d %d %d\n",i, i+1, i+2);//溢出系统也不会通知 printf("%u %u %u\n",j, j+1, j+2); return 0; }

在我们的系统下输出的结果是:

2147483647 -2147483648 -2147483647 4294967295 0 1

在超出最小值时,无符号类型从0开始,而有符号类型从最小值累加1开始。 溢出行为是未定义行为,C标准为定义有符号类型的溢出规则,以上描述的溢出类型比较有代表性,但是也可能出现其他情况。 因为数据越界,导致数据溢出了。 注意:当i超出(溢出)其相应的类型所能表示的最大值时,系统并未通知用户,因此,在编程时必循自己注意这类问题。

浮点型

浮点型数据是用来表示具有小数点的实数。为什么在C中把实数称为浮点数呢?在C语言中,实数是以指数的形式存放在存储单元中的。一个实数表示为指数可以有不止一种形式,如:3.1415 x 100,0.31415 x 101,0.031415 x 102等,他们表示同一个值。可以看到同一个值,小数点的位置是可以浮动的(加0)。由于小鼠可以浮动,所以实数的指数形式称为浮点数。 浮点数在计算机内存中的存放形式:浮点数 = 符号位 + 指数位 + 尾数位。浮点数是一个近似值。尾数位数可能丢失,造成精度损失。 C编译系统把浮点型常量都按双精度处理。最好把浮点数都存为双精度double型,精确度高。 在这里插入图片描述

float类型(单精度浮点型)C标准规定,float类型必须能至少表示6位有效数字,且取值范围至少是10-37~10+37。前一项规定指float类型必须能够表示33.3333333的前6位数字,而不是精确到小数点后6位数字。在打印输出时,小数点后默认保留6位。

double类型(双精度浮点型)和float类型的最小取值范围相同,可以得到15位有效数字。在C语言中进行浮点数的算数运算时,将float型数据都自动转换为double型,然后进行运算。在打印输出时,小数点后默认保留6位。

注意:凡以小数形式或指数形式出现的实数,是浮点型常量,在内存中都已指数形式存储。如:10是整型常量,10.0是浮点型常量。C编译系统吧浮点型常量都按双精度处理,分配8个字节。 在浮点数后面加上f或F后缀可覆盖默认设置,编译器会将浮点型看作float类型,没有后缀的浮点型常量作为double类型。 如果有:

float num1 = 3.14156;

在进行编译时,对float变量分配4个字节,但对于浮点型常量3.14156,则按双精度处理,分配8个字节。编译系统会发出警告warning C4305: “初始化”: 从“double”到“float”截断。意为:“把一个双精度常量转换为float”,提醒用户可能损失精度。一般这样的“警告”不会影响程序运行的正确性,但会影响程序运行结果的精确度。在常量的末尾加专用字符,强制指定常量的类型。如:在3.14156后面加字母f或F,就表示是float型,分配4个字节。

无论是单精度还是双精度类型,浮点数的输出格式都是小数位数6位数,精度也有损失(四舍五入到第6位)。

float num1 = 3.1415926; float num2 = 3.1415926L; double num3 = 3.1415926; printf ("num1 = %f num2 = %f num3 = %f",num1, num2, num3);

输出:

num1 = 3.141593 num2 = 3.141593 num3 = 3.141593请按任意键继续. . .

后一位改为比4小的数:

float num1 = 3.141592255; float num2 = 3.141592055L; double num3 = 3.141592255; printf ("num1 = %f num2 = %f num3 = %f",num1, num2, num3);

输出

num1 = 3.141592 num2 = 3.141592 num3 = 3.141592请按任意键继续. . .

要想输出小数点后多位,可以设置输出位数格式。可以在输出格式%f前加0.n,例如:%0.8f或%.8f。

#include int main() { float num1 = 3.14154444444L; double num2 = 3.141595555; float num3 = 3.1415L; double num4 = 3.1415; float num5 = 3.14154444444; printf("num1 = %0.8f num2 = %.8f num3 = %.8f num4 = %.8f num5 = %.8f",num1, num2, num3, num4, num5); return 0; }

输出:

num1 = 3.14154434 num2 = 3.14159555 num3 = 3.14150000 num4 = 3.14150000 num5 = 3.14154434请按任意键继续. . .

值得注意的是可以看到:float型有效数字为小数点后6位为有效数字,超过6位,其他位数取随机值。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3