3 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
C ++使用C標(biāo)準(zhǔn)中定義的限制(C ++:18.3.2(c.limits),C:5.2.4.2.1):
LONG_MIN -2147483647 // -(2^31 - 1)
LONG_MAX +2147483647 // 2^31 - 1
因此,可以確保long至少為32位。
而且,如果您想沿著漫長(zhǎng)的路線了解LONG_MIN/ 是否LONG_MAX可以用a表示long,則必須查看C ++標(biāo)準(zhǔn)中的18.3.1.2(numeric.limits.members):
static constexpr T min() throw(); // Equivalent to CHAR_MIN, SHRT_MIN, FLT_MIN, DBL_MIN, etc.
static constexpr T max() throw(); // Equivalent to CHAR_MAX, SHRT_MAX, FLT_MAX, DBL_MAX, etc.
我將腳注移到了注釋中,因此它與標(biāo)準(zhǔn)中出現(xiàn)的不完全相同。但這基本上意味著std::numeric_limits<long>::min()==LONG_MIN==(long)LONG_MIN和std::numeric_limits<long>::max()==LONG_MAX==(long)LONG_MAX。
因此,即使C ++標(biāo)準(zhǔn)未指定(帶符號(hào)的)負(fù)數(shù)的按位表示,它也必須是二進(jìn)制補(bǔ)碼,并且總共需要32位存儲(chǔ),或者它具有顯式符號(hào)位,這意味著它具有也有32位存儲(chǔ)。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
答案肯定是。閱讀我的OP和所有評(píng)論以了解確切原因,但這是簡(jiǎn)短版本。如果您對(duì)此有疑問或疑問,我建議您閱讀整個(gè)主題和所有評(píng)論。否則,請(qǐng)接受以下說(shuō)法:
C ++標(biāo)準(zhǔn)包括C標(biāo)準(zhǔn)的部分,包括用于定義LONG_MIN和LONG_MAX
LONG_MIN 定義為不大于 -2147483647
LONG_MAX 被定義為不小于 +2147483647
在C ++中,整數(shù)類型以二進(jìn)制形式存儲(chǔ)在基礎(chǔ)表示中
為了表示-2147483647和+2147483647二進(jìn)制,則需要32位。
A C ++長(zhǎng)被保證是能夠代表最小范圍LONG_MIN通過(guò)LONG_MAX
因此,a long必須至少為32位1。
編輯:
LONG_MIN并LONG_MAX具有第5.2.4.2.1節(jié)中C標(biāo)準(zhǔn)(ISO / IEC 9899:TC3)規(guī)定的大小的值:
其實(shí)現(xiàn)定義的值在幅度上應(yīng)等于或大于所示的(絕對(duì)值),并帶有相同的符號(hào)
— minimum value for an object of type long int
LONG_MIN -2147483647 // -(2 ^ 31 - 1)
— maximum value for an object of type long int
LONG_MAX +2147483647 // 2 ^ 31 - 1
1 32位:這并不意味著sizeof (long) >= 4,因?yàn)橐粋€(gè)字節(jié)不一定是8位。根據(jù)標(biāo)準(zhǔn),字節(jié)是一些未指定(平臺(tái)定義)的位數(shù)。盡管大多數(shù)讀者會(huì)發(fā)現(xiàn)這很奇怪,但實(shí)際的硬件CHAR_BIT是16或32。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
但是Alf和其他人明確指出long至少必須為32位。這就是我要建立的。C ++標(biāo)準(zhǔn)明確指出未指定字節(jié)中的位數(shù)??赡苁?、8、16、42 ...那么,如何將數(shù)字LONG_MIN-LONG_MAX調(diào)整為至少32位呢?
您需要在值表示形式中使用32位,以便至少獲得那么多的位模式。并且由于C ++需要整數(shù)的二進(jìn)制表示(標(biāo)準(zhǔn)中明確的語(yǔ)言,第3.9.1 / 7節(jié)),因此QED
- 3 回答
- 0 關(guān)注
- 635 瀏覽
添加回答
舉報(bào)