8.C语言中的整数(short,int,long)

对于 32 位的 Windows、Linux 和 Mac OS,short 的长度为 2 个字节,int 为 4 个字节,long 也为 4 个字节。PC和服务器上的 32 位系统占有率也在慢慢下降,嵌入式系统使用 32 位越来越多。

在 64 位环境下,不同的操作系统会有不同的结果,如下所示:

操作系统 short int long
Win64(64位 Windows) 2 4 4
类Unix系统(包括 Unix、Linux、Mac OS、BSD、Solaris 等) 2 4 8

1.sizeof 操作符

获取某个数据类型的长度可以使用 sizeof 操作符,如下所示:

#include <stdio.h>
int main()
{
short a = 10;
int b = 100;


int short_length = sizeof a;
int int_length = sizeof(b);
int long_length = sizeof(long);
int char_length = sizeof(char);


printf("short=%d, int=%d, long=%d, char=%d\n", short_length, int_length, long_length, char_length);


return 0;
}

在 32 位环境以及 Win64 环境下的运行结果为:

short=2, int=4, long=4, char=1

在 64 位 Linux 和 Mac OS 下的运行结果为:

short=2, int=4, long=8, char=1


sizeof 用来获取某个数据类型或变量所占用的字节数,如果后面跟的是变量名称,那么可以省略( ),如果跟的是数据类型,就必须带上( )

需要注意的是,sizeof 是C语言中的操作符,不是函数,所以可以不带( ),后面会详细讲解。

2.不同整型的输出

使用不同的格式控制符可以输出不同类型的整数,它们分别是:

  • %hd用来输出 short int 类型,hd 是 short decimal 的简写;
  • %d用来输出 int 类型,d 是 decimal 的简写;
  • %ld用来输出 long int 类型,ld 是 long decimal 的简写。


下面的例子演示了不同整型的输出:

#include <stdio.h>
int main()
{
short a = 10;
int b = 100;
long c = 9437;


printf("a=%hd, b=%d, c=%ld\n", a, b, c);
return 0;
}

运行结果:
a=10, b=100, c=9437

在编写代码的过程中,我建议将格式控制符和数据类型严格对应起来,养成良好的编程习惯。当然,如果你不严格对应,一般也不会导致错误,例如,很多初学者都使用%d输出所有的整数类型,请看下面的例子:

#include <stdio.h>
int main()
{
short a = 10;
int b = 100;
long c = 9437;


printf("a=%d, b=%d, c=%d\n", a, b, c);
return 0;
}

运行结果仍然是:
a=10, b=100, c=9437

当使用%d输出 short,或者使用%ld输出 short、int 时,不管值有多大,都不会发生错误,因为格式控制符足够容纳这些值。

当使用%hd输出 int、long,或者使用%d输出 long 时,如果要输出的值比较小(就像上面的情况),一般也不会发生错误,如果要输出的值比较大,就很有可能发生错误,例如:

#include <stdio.h>
int main()
{
int m = 306587;
long n = 28166459852;
printf("m=%hd, n=%hd\n", m, n);
printf("n=%d\n", n);


return 0;
}

在 64 位 Linux 和 Mac OS 下(long 的长度为 8)的运行结果为:
m=-21093, n=4556
n=-1898311220

输出结果完全是错误的,这是因为%hd容纳不下 m 和 n 的值,%d也容纳不下 n 的值。

读者需要注意,当格式控制符和数据类型不匹配时,编译器会给出警告,提示程序员可能会存在风险。

编译器的警告是分等级的,不同程度的风险被划分成了不同的警告等级,而使用%d输出 short 和 long 类型的风险较低,如果你的编译器设置只对较高风险的操作发出警告,那么此处你就看不到警告信息。

posted @ 2022-03-21 20:03  随遇而安==  阅读(343)  评论(0编辑  收藏  举报