我正在自己在线学习C编程,这样我就可以为2016年冬天的大学做好准备.我正在学习数据类型.我不明白之间的区别:
short
long
long long integers in C programming
Run Code Online (Sandbox Code Playgroud)
我在线查看,但我仍然对如何使用这些以及何时使用感到困惑.谢谢.
Dav*_*lor 10
C最初是为16位机器编写的,其中最快和最方便的整数大小是16位.这是原始int类型.有时,程序员需要32位数字,所以那些是long int类型.
在适当的时候,人们将C移植到32位机器,其中最方便的字大小是32位.他们希望继续使用int以表示原生单词大小,因为例如现实世界中的每个C程序都int i;在其中某个地方,但有时,他们还需要使用16位数字来节省空间.所以那些成了这种short int类型.
时间过去了,C需要移植到64位机器上.到那时,有许多程序存在,假设long正好是32位宽,不幸的是,许多程序也假设a long与指针,IPv4地址,文件偏移,时间戳相同的大小,等良好的代码使用类型,例如size_t,uintptr_t和off_t代替,但系统库的旧版本中定义的库函数来使用long,所以很多的遗留代码不得不为好.自从C99问世以来,int32_t标准库中也有一些类型可以指定精确的宽度,而Unix和Windows已经在不同的名称下使用了一段时间.
由于这些类型被用来表示相互矛盾的事情,今天的编译器为程序员提供了long32位和64位宽的选择,而64位编译器也int可以是32位或64位宽.至少有一个真正的编译器定义int为64位(本机字长)但是long32位(因此系统库和代码仍然可以工作).标准委员会禁止在C11中:long long int现在保证至少与最宽long int,并且long int至少一样宽int.
因为许多程序无法long在没有中断的情况下重新定义为64位,所以C需要一种意味着(至少)64位的新类型.到那时,标准委员会不愿意在头文件之外引入新的关键字,因此他们重新使用现有的关键字并将其命名long long int.
简而言之,你不应该假设超出至少16位宽和快,至少32位宽的内容int和long含义,并且在C11编译器上至少宽泛但不宽.出于一般目的,请使用.如果需要数组索引,请使用或.如果你想确定你可以保持一个超过32,767的数字,并且认真地期望有一天你可能需要在某个16位机器上运行,请使用或来自快速类型.如果您正在进行系统调用,请使用与其参数相同的类型.如果要将指针存储在整数类型中,请使用.如果您需要至少64位宽的数字,请使用intlonglongintlong longintsize_tptrdiff_tlong<inttypes.h>uintptr_tlong long,如果您确切知道所需的宽度,请使用精确宽度类型.
| 归档时间: |
|
| 查看次数: |
18200 次 |
| 最近记录: |