C编程中Short,long和Long long int的区别?

时间:2015-10-03 15:41:12

标签: c

我正在自己在线学习C编程,这样我就可以为2016年冬季的大学做好准备。我现在正在学习数据类型。 我不明白它们之间的区别:

short
long
long long integers in C programming

我在线查看,但我仍然对如何使用这些以及何时使用感到困惑。 谢谢。

2 个答案:

答案 0 :(得分:10)

C最初是为16位机器编写的,其中最快和最方便的整数大小是16位。这是原始的int类型。有时,程序员需要32位数字,因此那些是long int类型。

在适当的时候,人们将C移植到32位机器,其中最方便的字大小是32位。他们希望继续使用int来表示原生单词大小,因为例如现实世界中的每个C程序都在其中有int i;,但有时,他们还需要使用16位数字节省空间。所以那些成为short int类型。

时间过去了,C需要移植到64位计算机上。到那时,存在许多程序,假设long正好是32位宽,不幸的是,许多程序也认为long与指针的大小相同, IPv4地址,文件偏移,时间戳等。优秀代码使用size_tuintptr_toff_t等类型,但旧版本的系统库将其库函数定义为使用long,因此许多遗留代码也必须如此。自从C99问世以来,标准库中也有类似int32_t这样的类型来指定精确的宽度,而Unix和Windows已经在不同的名称下使用它们了一段时间。

由于这些类型被用来表示相互矛盾的事情,今天的编译器为程序员提供了long在32位和64位宽之间的选择,而64位编译器让int为32或者64位宽。至少有一个真正的编译器将int定义为64位(本机字长),但将long定义为32位(因此系统库和代码仍可正常工作)。标准委员会禁止在C11中:long long int现在保证至少与long int一样宽,long int至少与int一样宽。

因为许多程序无法在不中断的情况下将long重新定义为64位,所以C需要一个意味着(至少)64位的新类型。到那时,标准委员会不愿在头文件之外引入新的关键字,因此他们重新使用现有的关键字,并将其命名为long long int

简而言之,您不应该假设intlong的意思超出int至少16位宽且快,long至少32位宽,在C11编译器上long至少与int一样宽但不宽于long long。出于一般目的,请使用int。如果您需要数组索引,请使用size_tptrdiff_t。如果你想确定你可以保持一个超过32,767的数字,并且认真地期望有一天你可能需要在某个16位机器上运行,请使用long或来自<inttypes.h>的快速类型。如果您正在进行系统调用,请使用与其参数相同的类型。如果要将指针存储在整数类型中,请使用uintptr_t。如果您需要一个至少64位宽的数字,请使用long long,如果您确切知道所需的宽度,请使用精确宽度类型。

答案 1 :(得分:1)

它们只是不同的数据类型。它们有不同的范围。所有存储整数,但消耗不同的内存并具有不同的范围。例如:short int消耗16位,long int消耗32位,long long int消耗64位。 short int的最大值为32767.因此,您需要存储使用long int所需的大值。 Long long int是最大的,它可以存储多达20个! 更多解释和范围可在Wikipedia page最佳!

中找到