3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
C ++標(biāo)準(zhǔn)沒(méi)有以字節(jié)為單位指定整數(shù)類型的大小,但它指定了它們必須能夠容納的最小范圍。您可以從所需范圍推斷出最小位數(shù)。您可以從中推斷出以字節(jié)為單位的最小大小以及定義一個(gè)字節(jié)中位數(shù)的CHAR_BIT
宏的值(除了最模糊的平臺(tái)之外,它都是8,并且它不能小于8)。
一個(gè)額外的約束char
是它的大小總是1個(gè)字節(jié),或CHAR_BIT
位(因此名稱)。
標(biāo)準(zhǔn)要求的最小范圍(第22頁(yè))是:
和MSDN上的數(shù)據(jù)類型范圍:
signed char
:-127到127(注意,不是-128到127;這可以容納1個(gè)補(bǔ)碼和符號(hào)和大小的平臺(tái))unsigned char
:0到255“plain”
char
:與signed char
or 相同的范圍,或者unsigned char
是實(shí)現(xiàn)定義的signed short
:-32767至32767unsigned short
:0到65535signed int
:-32767至32767unsigned int
:0到65535signed long
:-2147483647至2147483647unsigned long
:0到4294967295signed long long
:-9223372036854775807至9223372036854775807unsigned long long
:0到18446744073709551615
C ++(或C)實(shí)現(xiàn)可以將字節(jié)的大小(以字節(jié)sizeof(type)
為單位)定義為任何值,只要
表達(dá)式
sizeof(type) * CHAR_BIT
求值為足夠高的位數(shù)以包含所需的范圍,并且類型的排序仍然有效(例如
sizeof(int) <= sizeof(long)
)。
實(shí)際的特定于實(shí)現(xiàn)的范圍可以<limits.h>
在C 中的頭文件中找到,或者<climits>
在C ++中找到(或者甚至更好,std::numeric_limits
在<limits>
頭文件中模板化)。
例如,您將找到以下內(nèi)容的最大范圍int
:
C:
#include <limits.h>const int min_int = INT_MIN;const int max_int = INT_MAX;
C ++:
#include <limits>const int min_int = std::numeric_limits<int>::min();const int max_int = std::numeric_limits<int>::max();

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
對(duì)于32位系統(tǒng),“事實(shí)上”標(biāo)準(zhǔn)是ILP32 - 也就是說(shuō)int
,long
指針都是32位數(shù)量。
對(duì)于64位系統(tǒng),主要的Unix'事實(shí)上'標(biāo)準(zhǔn)是LP64 - long
指針是64位(但是int
是32位)。在Windows 64位標(biāo)準(zhǔn)是LLP64 - long long
和指針是64位(但long
并int
都是32位)。
有一段時(shí)間,一些Unix系統(tǒng)使用了ILP64組織。
這些事實(shí)上的標(biāo)準(zhǔn)都沒(méi)有通過(guò)C標(biāo)準(zhǔn)(ISO / IEC 9899:1999)立法,但所有標(biāo)準(zhǔn)都是允許的。
而且,顧名思義,sizeof(char)
就是1
,盡管在Perl的配置腳本測(cè)試。
需要注意的是有機(jī)器(Crays),其中CHAR_BIT
大于8.這意味著,IIRC大得多,這sizeof(int)
也是1,因?yàn)檫@兩個(gè)char
和int
是32位。
- 3 回答
- 0 關(guān)注
- 910 瀏覽
添加回答
舉報(bào)