64位Windows上Long的位大小是多少?

64位Windows上Long的位大小是多少?

不久前,有人告诉我long不是64位机器上的64位,我应该一直使用int..这对我来说毫无意义。我见过一些文档(比如苹果官方网站上的文档)说long在为64位CPU编译时,确实是64位.我在64位Windows上查了一下

  • 窗户:

    long

    int

    保持32位长度,并为64位整数定义特殊的新数据类型.

(来自http:/www.Intel.com/cd/IDS/Developer/Asmo-na/Eng/197664.htm?page=2)

我该用什么?我应该给出这样的定义吗uwsw(UN)符号宽度)为long如果不是在Windows上,则对目标CPU位数进行检查?


慕田峪7331174
浏览 2465回答 3
3回答

米脂

在Unix世界中,对于64位平台的整数和指针的大小有一些可能的安排。最广泛使用的两个是ILP 64(实际上,这方面的例子非常少;Cray就是其中之一)和LP 64(几乎所有其他方面)。缩写词来自于‘int,long,指针是64位’和‘long,指针是64位’。Type&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ILP64&nbsp; &nbsp;LP64&nbsp; &nbsp;LLP64char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8&nbsp; &nbsp; &nbsp; 8&nbsp; &nbsp; &nbsp; &nbsp;8short&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 16&nbsp; &nbsp; &nbsp;16&nbsp; &nbsp; &nbsp; 16int&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 64&nbsp; &nbsp; &nbsp;32&nbsp; &nbsp; &nbsp; 32long&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;64&nbsp; &nbsp; &nbsp;64&nbsp; &nbsp; &nbsp; 32long long&nbsp; &nbsp; &nbsp; &nbsp; 64&nbsp; &nbsp; &nbsp;64&nbsp; &nbsp; &nbsp; 64pointer&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 64&nbsp; &nbsp; &nbsp;64&nbsp; &nbsp; &nbsp; 64ILP 64系统被放弃,取而代之的是LP 64(也就是说,根据aspengroup的建议,几乎所有后来者都使用LP 64;只有具有64位操作长期传承的系统才会使用不同的方案)。所有现代64位Unix系统都使用LP 64。MacOSX和Linux都是现代64位系统.微软使用了另一种转换为64位的方案:LLP 64(‘Long,指针是64位’)。这意味着32位软件可以在不改变的情况下重新编译。它有不同于其他人的缺点,而且还需要修改代码以利用64位容量。总有必要进行修订;它只是与Unix平台上所需的一组不同的修订。如果您将软件设计为平台中性整数类型名称,则可能使用c99。<inttypes.h>当这些类型在平台上可用时,报头以已签名(列出)和无符号(未列出;前缀为‘u’)提供:int8_t-8位整数int16_t-16位整数int32_t-32位整数int64_t-64位整数uintptr_t-大到足以容纳指针的无符号整数intmax_t-平台上整数的最大大小(可能大于int64_t)然后,您可以在重要的地方使用这些类型编写应用程序,并且对系统类型非常小心(这可能是不同的)。有一个intptr_t类型-用于保存指针的带符号整数类型;您应该计划不使用它,或者只使用它作为减去两个指针的结果。uintptr_t值(ptrdiff_t).但是,正如问题所指出的(难以置信),64位机器上的整数数据类型的大小有不同的系统。习惯它;世界不会改变的。

九州编程

目前还不清楚问题是关于MicrosoftC+编译器还是WindowsAPI。但是,没有[c+]标记,所以我假设它是关于WindowsAPI的。一些答案受到链接腐烂的影响,所以我提供了另一个可以腐烂的链接。有关WindowsAPI类型的信息,请参见INT,&nbsp;LONG等等,MSDN上有一个页面:Windows数据类型这些信息也可在各种Windows头文件中获得,如WinDef.h..我在这里列举了几种相关类型:Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S/U&nbsp;|&nbsp;x86&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;x64 ----------------------------+-----+--------+------- BYTE,&nbsp;BOOLEAN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;U&nbsp;&nbsp;&nbsp;|&nbsp;8&nbsp;bit&nbsp;&nbsp;|&nbsp;8&nbsp;bit ----------------------------+-----+--------+------- SHORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S&nbsp;&nbsp;&nbsp;|&nbsp;16&nbsp;bit&nbsp;|&nbsp;16&nbsp;bit USHORT,&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;U&nbsp;&nbsp;&nbsp;|&nbsp;16&nbsp;bit&nbsp;|&nbsp;16&nbsp;bit ----------------------------+-----+--------+------- INT,&nbsp;LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S&nbsp;&nbsp;&nbsp;|&nbsp;32&nbsp;bit&nbsp;|&nbsp;32&nbsp;bit UINT,&nbsp;ULONG,&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;U&nbsp;&nbsp;&nbsp;|&nbsp;32&nbsp;bit&nbsp;|&nbsp;32&nbsp;bit ----------------------------+-----+--------+------- INT_PTR,&nbsp;LONG_PTR,&nbsp;LPARAM&nbsp;&nbsp;&nbsp;|&nbsp;S&nbsp;&nbsp;&nbsp;|&nbsp;32&nbsp;bit&nbsp;|&nbsp;64&nbsp;bit UINT_PTR,&nbsp;ULONG_PTR,&nbsp;WPARAM&nbsp;|&nbsp;U&nbsp;&nbsp;&nbsp;|&nbsp;32&nbsp;bit&nbsp;|&nbsp;64&nbsp;bit ----------------------------+-----+--------+------- LONGLONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S&nbsp;&nbsp;&nbsp;|&nbsp;64&nbsp;bit&nbsp;|&nbsp;64&nbsp;bit ULONGLONG,&nbsp;QWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;U&nbsp;&nbsp;&nbsp;|&nbsp;64&nbsp;bit&nbsp;|&nbsp;64&nbsp;bit
打开App,查看更多内容
随时随地看视频慕课网APP