亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

C++ C
慕田峪7331174 2019-07-05 12:37:06
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)我該用什么?我應該給出這樣的定義嗎uw, sw(UN)符號寬度)為long如果不是在Windows上,則對目標CPU位數進行檢查?
查看完整描述

3 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

在Unix世界中,對于64位平臺的整數和指針的大小有一些可能的安排。最廣泛使用的兩個是ILP 64(實際上,這方面的例子非常少;Cray就是其中之一)和LP 64(幾乎所有其他方面)。縮寫詞來自于‘int,long,指針是64位’和‘long,指針是64位’。

Type           ILP64   LP64   LLP64

char              8      8       8

short            16     16      16

int              64     32      32

long             64     64      32

long long        64     64      64

pointer          64     64      64

ILP 64系統被放棄,取而代之的是LP 64(也就是說,根據aspengroup的建議,幾乎所有后來者都使用LP 64;只有具有64位操作長期傳承的系統才會使用不同的方案)。所有現代64位Unix系統都使用LP 64。MacOSX和Linux都是現代64位系統.

微軟使用了另一種轉換為64位的方案:LLP 64(‘Long,指針是64位’)。這意味著32位軟件可以在不改變的情況下重新編譯。它有不同于其他人的缺點,而且還需要修改代碼以利用64位容量??傆斜匾M行修訂;它只是與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位機器上的整數數據類型的大小有不同的系統。習慣它;世界不會改變的。


查看完整回答
反對 回復 2019-07-05
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

目前還不清楚問題是關于MicrosoftC+編譯器還是WindowsAPI。但是,沒有[c+]標記,所以我假設它是關于WindowsAPI的。一些答案受到鏈接腐爛的影響,所以我提供了另一個可以腐爛的鏈接。


有關WindowsAPI類型的信息,請參見INTLONG等等,MSDN上有一個頁面:

Windows數據類型

這些信息也可在各種Windows頭文件中獲得,如WinDef.h..我在這里列舉了幾種相關類型:

Type                        | S/U | x86    | x64
----------------------------+-----+--------+-------
BYTE, BOOLEAN               | U   | 8 bit  | 8 bit
----------------------------+-----+--------+-------
SHORT                       | S   | 16 bit | 16 bit
USHORT, WORD                | U   | 16 bit | 16 bit
----------------------------+-----+--------+-------
INT, LONG                   | S   | 32 bit | 32 bit
UINT, ULONG, DWORD          | U   | 32 bit | 32 bit
----------------------------+-----+--------+-------
INT_PTR, LONG_PTR, LPARAM   | S   | 32 bit | 64 bit
UINT_PTR, ULONG_PTR, WPARAM | U   | 32 bit | 64 bit
----------------------------+-----+--------+-------
LONGLONG                    | S   | 64 bit | 64 bit
ULONGLONG, QWORD            | U   | 64 bit | 64 bit


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 2529 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號