C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

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等,它们往往用于函数调用中。如果函数的形参为长整型,则要求实参也为长整型。