4.4.1 整型常量
整型常量是整型常数,在C语言中有着十分重要的地位。
1.整型常量的标识形式
在C语言中,可以使用如下3种形式来表示整型常量。
(1)八进制整型常量。
八进制整型常量必须以0开头,即以0作为八进制数的前缀。数码取值范围为0~7。八进制数通常是无符号数。例如下面的常数都是合法的八进制数。
❑ 015(十进制为13)
❑ 0101(十进制为65)
❑ 0177777(十进制为65535)
而下面的常量都不是合法的八进制数。
❑ 256(无前缀0)
❑ 03A2(包含了非八进制数码)
❑ -0127(出现了负号)
(2)十六进制整型常量。
十六进制整型常量的前缀为0X或0x。其数码取值范围为0~9、A~F或a~f。
以下各数是合法的十六进制整型常量。
❑ 0X2A(十进制为42)
❑ 0XA0(十进制为160)
❑ 0XFFFF(十进制为65535)
而下面的常量都不是合法的十六进制整型常量。
❑ 5A(无前缀0X)
❑ 0X3H(含有非十六进制数码)
(3)十进制整型常量。
十进制整型常量没有前缀,其数码取值范围为0~9。下面的常量都是合法的十进制整型常量。
❑ 237
❑ -568
❑ 65535
❑ 1627
而下面的常量都不是合法的十进制整常量。
❑ 023(不能有前导0)
❑ 23D(含有非十进制数码)
整型常量的长度是不同的,不同类型的整型常量长度的表示方式也不同。在16位字长的机器上,基本整型常量的长度也为16位,因此表示值数值范围也是有限定的。十进制无符号整型常量的范围为0~65535,有符号数的范围为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数字超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。
下面的是十进制长整型常量。
❑ 158L(十进制为158)
❑ 358000L(十进制为358000)
下面的数是八进制长整型常量。
❑ 012L(十进制为10)
❑ 077L(十进制为63)
❑ 0200000L(十进制为65536)
下面的数是十六进制长整型常量。
❑ 0X15L(十进制为21)
❑ 0XA5L(十进制为165)
❑ 0X10000L(十进制为65536)
长整数158L和基本整型常量158在数值上并无区别。但是由于158L是长整型常量,所以C编译系统将为它分配4字节存储空间。而因为158是基本整型,所以只为它分配2字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。
无符号数也可以用后缀来表示,无符号整型常量的后缀为“U”或“u”。例如:358u、0x38Au和235Lu均是无符号数。
可以同时使用前缀和后缀以表示各种类型的数。例如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。
2.整型常量的类型
整型常量类型的具体说明如下所示。
(1)如果一个整数的值介于-32768~+32767,那么认为它是整型,它可以赋值给整型和长整型变量。
(2)如果一个整数超过了上述范围,而在-2147483648~+2147483647内,则认为它是长整型,可以将它赋值给一个长整型变量。
(3)如果在某一计算机系统的C版本(例如Turbo C)中,已知短整型与整型数据在内存中的长度相同,则它的范围与整型相同。因此,一个整型常量同时也是一个短整型常量,可以赋给整型或短整型变量。
(4)一个整型常量后面加一个字母u或U,则它是无符号整型,如12345u,在内存中按无符号整型规定的方式存储数据(存储单元中最高位不是符号位,而用来存储数据)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。
(5)在一个整型常量后面加一个字母l或L,则认为它是长整型常量。例如123l、432L、0L等,它们往往用于函数调用中。如果函数的形参为长整型,则要求实参也为长整型。