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

参见英文答案 > What is the difference between “long”, “long long”, “long int”, and “long long int” in C++?                                    5个
我正在自己在线学习C编程,这样我就可以为2016年冬天的大学做好准备.我正在学习数据类型.
我不明白之间的区别:

short
long
long long integers in C programming

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

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

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

时间过去了,C需要移植到64位机器上.到那时,有很多程序存在,假设长度正好是32位宽,不幸的是,很多程序也假设长度与指针,IPv4地址,文件偏移量相同,好的代码使用诸如size_t,uintptr_t和off_t之类的类型,但旧版本的系统库定义了它们的库函数使用时间很长,因此许多遗留代码也必须如此.自C99问世以来,标准库中也有类似int32_t这样的类型来指定精确的宽度,而Unix和Windows在不同的名称下使用了一段时间.

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

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

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

转载注明原文:C编程中Short,long和Long long int的区别? - 代码日志