基本数据类型是最常用的数据类型。基本数据类型主要包括整型、浮点型、字符型。
1.整型数据
(1)整型常量。
按不同的进制进行划分,整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。
①十进制数表示法。
十进制整常数没有前缀,由数字0~9组成。
如178、-178、32767、-32768、0都是合法的十进制整常数。
②八进制数表示法。
数字0作为前缀,由数字0~7组成。
合法的八进制整常数如026(十进制为22)、0153(十进制为107)、0177777(十进制为65535)。
不合法的八进制整常数如26(无前缀0)、019(出现了0~7以外的字符)。
③十六进制数表示法。
以0X或0x作为前缀,由数字0~9以及A~F(或a~f)组成,其中A(a)~F(f)分别表示数值10~15。
合法的十六进制整常数如0X16(十进制为22)、0X2A(十进制为42)、0XFFFF(十进制为65535)。
不合法的十六进制整常数如3a(无前缀)、0X5G(含有非十六进制字符)。
程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错,以免造成结果不正确。
④整型常量的数值范围。
在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。
如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀L或l来表示。例如:
十进制长整型常数,如156L(十进制为156)、-358000L(十进制为-358000)。
八进制长整型常数,如012L(十进制为10)、0200000L(十进制为65536)。
十六进制长整型常数,如0X16L(十进制为22)、0X10000L(十进制为65536)。
无论是短整型数还是长整型数,都被识别为有符号整数。无符号整数在数的末尾应该加上字母后缀u或U,若是长整型无符号数,则加后缀lu或LU。例如:358u、0x38Au、235Lu均为无符号数。前缀、后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制数为165。
(2)整型变量。
根据占用内存字节数的不同,整型变量可以分为基本整型、短整型、长整型和无符号整型四种。
①基本整型:类型说明符为int,在内存中占4个字节,取值为基本整常数。
②长整型:类型说明符为longint或long,在内存中占4个字节,取值为长整常数。
③短整型:类型说明符为shortint,在内存中至少占2个字节,取值为基本整常数。
④无符号型:类型说明符为unsigned,在内存中占4个字节。
其中,无符号型又分为无符号整型(unsignedint)、无符号短整型(unsignedshort)和无符号长整型(unsignedlong)3种类型。各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省去了符号位,所以不能表示负数。在前面已经介绍过整型变量的定义形式,本节不再赘述。
(3)整型数据所占字节数和数值范围。
不同的编译系统或计算机系统对不同类型整型数据所占用的字节数有不同的规定。表2-2列出了在VC中定义的整型数据所占用的字节数和数值范围。(表中方括号内的单词可以省略,各单词排列的先后次序无关紧要。)
表2-2 VC中定义的整型数据所占用的字节数和数值范围
(4)整数在内存中的存储形式。
计算机中,内存储器的最小存储单位称为“位(bit)”。由于只能存放0或1,所以称为二进制位。大多数计算机把8个二进制位组成一个“字节(byte)”,并给每个字节分配一个地址。若干字节组成一个“字(word)”,用一个“字”来存放一条机器指令或一个数据。一个字含多少个字节随机器的不同而不同。如果一台计算机以两个字节(16个二进制位)来存放一条机器指令,则称此计算机的字长为16位;如果以四个字节(32个二进制位)来存放一条机器指令,则称此计算机的字长为32位。
通常把一个字节中的最右边一位称为最低位,最左边一位称为最高位。对于一个有符号整数,其中最高位(最左边的一位)用来存放整数的符号,称为符号位。若是正整数,最高位放置0;若是负整数,最高位放置1。
①正整数。(www.xing528.com)
当用两个字节存放一个short类型正整数时,例如正整数5,其在内存中的二进制码为:
0000000000000101
对于正整数的这种存储形式称为用“原码”形式存放。因此用两个字节存放short类型的最大正整数是:
0111111111111111
它的值为32767。
②负整数。
负整数在内存中是以“补码”形式存放的。
取某个二进制数的补码,例如10000101(十进制数-5)的补码,步骤如下。
第一步:求原码的反码。把原码除符号位之外的二进制码按位取反,即把1变成0,0变成1,即得到该原码的反码。例如10000101的反码为11111010。
第二步:把所得的反码加1,即得到原码的补码。因此11111010加1得11111011,这就是-5在内存中的二进制码。若用两个字节表示,即为:
1111111111111011
另有把内存中以补码形式存放的二进制码转化成十进制的负整数的步骤如下。
第一步:先对除符号位之外的各位取反。例如有补码11111010,取反后为10000101。
第二步:将所得二进制数转换成十进制数。例如,10000101的十进制数为-5。
第三步:对所求得的数再减1,即为-6。
通过以上分析可知,由两个字节存放的最小整数是1000000000000000,它对应的十进制数为-32768,而-1在内存中存放的二进制码为1111111111111111。
③无符号整数。
用两个字节存放一个整数时,若说明为无符号整数,则最高位不再用来存放整数的符号,16个二进制位全部用来存放整数,因此无符号整数不可能是负数。这时,若内存中存放的16个二进制位全部为1,则它所代表的整数就不再是-1,而是65535。
2.实型数据
(1)实型常量。
实型常量又称实数或浮点数。在C语言中可以用小数形式和指数形式表示一个实型常量。
①小数形式。
小数形式是由数字和小数点组成的一种实数表示形式,例如10.0、3.14159、-0.1等都是合法的实型常量。注意:小数形式表示的实型常量必须要有小数点。
②指数形式。
指数形式,即科学计数法,由十进制数加阶码标志e或E以及阶码(只能为整数,可以带符号)组成。C语言的语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。形式为:
<尾数>E(e)<整型指数>
例如:1.05E9表示1.05×109;
5.14E5表示5.14×105;
-5.8E-3表示-5.8×10-3。
注意,在字母e或E的前后以及数字之间不能出现空格。
(2)实型变量。
C语言中实型变量分为单精度型和双精度型两种,分别用类型名float和double进行定义。
单精度型变量定义的形式如下:
floata,b,c;
双精度型变量定义的形式如下:
doublex,y,z;
在一般计算机系统中,为float类型的变量分配4个字节的存储单元,为double类型的变量分配8个字节的存储单元,并按实型数的存储方式存放数据。实型变量只能存放实型数,不能用整型变量存放一个实数,也不能用实型变量存放一个整数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。