C

C 知识量:16 - 74 - 317

3.3 其他整数类型><

其他整数类型- 3.3.1 -

C语言提供了3个附属关键字修饰基本整数类型,它们是:short、long和unsigned。

  • short int类型(可以简写为short)占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。short类型是有符号类型。

  • long int类型(可以简写为long)占用的存储空间可能比int多,适用于较大数值的场合。long类型是有符号类型。

  • long long int类型(可以简写为long long)占用的存储空间可能比long多,适用于更大数值的场合。该类型至少占用64位,long类型是有符号类型。

  • unsigned int类型(可以简写为unsigned)只用于非负值的场合。它与有符号类型表示的范围不同。例如:16位unsigned int允许的取值范围是0~65535,而不是-32768~32767。表示负号的一位被省下来用来表示数值,因此,unsigned类型可以表示更大的取值范围。

  • 除了unsigned int外,还有unsigned long int(unsigned long)、unsigned short int(unsigned short)和unsigned long long int(unsigned long long)。

  • 可以在有符号类型前面添加关键字signed来强调使用有符号类型的意图,但这不是必须的。例如:short与signed short表示一个意思。

声明其他整数类型- 3.3.2 -

其他整数类型的声明方式与int类型相同,例如:

short int a;
short b;
long int c;
long d;
long long int e;
long long f; 
unsigned int g;
unsigned h;
unsiged short i;
unsiged long j;
unsiged long long k;

以上代码中,变量a与b,c与d,e与f,g与h,声明的类型是一样的。

使用多种整数类型的原因- 3.3.3 -

C语言规定了short占用的存储空间不能多于int,long占用的存储空间不能少于int,这样的规定是为了适应不同的机器。

现在,对于C语言,计算机的最常设置是:long long占64位,long占32位,short占16位,int占16位或32位(这取决于计算机的自然字长)。在实际应用中,以上类型在表示数值范围上通常会有重叠。

设置不同的类型就可以根据实际需要进行选择,以达到特定目的:

  • unsigned类型:常用于计数,因为计数是不用负数的。而且,unsigned类型相对于有符号的数可以表示的范围更大。

  • long类型:如果一个数超出了int类型的取值范围,就应当使用long类型。但是,使用long类型而不是int类型也需要付出一定代价,那就是会减慢运算速度。需要特别注意的是:在long类型与int类型占用空间相同的计算机上编程时,当需要32位整数时,应当使用long而不是int,以便今后将程序移植到16位机器时仍然可以正常工作。

  • short类型:使用short类型可以减少空间消耗,此外,计算机中某些组件使用的硬件寄存器是16位的。

整数常量- 3.3.4 -

关于整数常量需要知道的是:

  • 通常,程序中使用的数字都被存储为int类型。

  • 如果数字常量超出了int类型的表示范围,编译器会将其视为long类型。

  • 如果数字常量超出了long类型的表示范围,编译器会将其视为unsigned long类型。

  • 如果数字继续增大,编译器会将其视为long long或unsigned long long类型。

  • 对于八进制和十六进制常量,通常会被视为int类型,如果值太大,编译器会尝试使用unsigned int类型来存储,如果继续增大,编译器会依次使用long、unsigned long、long long和unsigned long long类型。

  • 如果需要,可以使用l或L后缀来定义一个由long类型表示的小数字。也可以使用ll或LL后缀来定义一个由long long类型表示的小数字。可以使用由u或U后缀定义的无符号数字。

打印整数类型- 3.3.5 -

要打印某些特定的整数类型需要使用特定的转换说明。

  • 如果要打印unsigned int类型的值,应当使用%u转换说明。

  • 如果要打印以十进制表示的long类型的值,应当使用%ld转换说明。

  • 如果要打印以十六进制表示的long类型的值,应当使用%lx转换说明。

  • 如果要打印以八进制表示的long类型的值,应当使用%lo转换说明。

  • 如果要打印以十进制表示的short类型的值,应当使用%hd转换说明。

  • 如果要打印以八进制表示的short类型的值,应当使用%ho转换说明。

其他需要注意的是:

  • 虽然C允许使用大写或小写的常量后缀,但是在转换说明中只能用小写。

  • h和l前缀都可以和u一起使用,表示无符号类型,例如:%hu表示打印unsigned short类型的值,%lu表示打印unsigned long类型的值。