各位大大好~
小弟最近在碰一些計算機組織的東西
而研讀的是白算盤這本書籍(2014出版)
其中有個問題小弟很百思不解
題目是這樣的:
Which type of variable that can contain 1,000,000,000 takes the most
memory space?
- long long int in C
- string in C
- string in Java
這答案是1
但小弟的想法是這樣的
String在C和Java中應為char組成的陣列
所以1,000,000,000 用long long int表示應該只佔 8 bytes
而string表示則C應該佔 10 bytes (10個數)
在Java中應該佔20 bytes(java char是 1 halfword)
拿去compiler跑sizeof 呈現的也是小弟認為的結果
所以想請問各位大大是不是小弟有什麼觀念上的錯誤呢
有爬過文
stackoverflow有一篇只是小弟看不太懂解釋https://stackoverflow.com/questions/3590437/variable-that-can-contain-most-memory-space
我跟你的想法差不多,所以我根據你提供的資訊往下找,找到了一些有趣的東西
是說這個問題也太極端了吧...如果你有什麼新收穫還請務必跟我分享 QQ
__int128
As an extension the integer scalar type __int128 is supported for targets which have an integer mode wide enough to hold 128 bits. Simply write __int128 for a signed 128-bit integer, or unsigned __int128 for an unsigned 128-bit integer. There is no support in GCC for expressing an integer constant of type __int128 for targets with long long integer less than 128 bits wide.
-- GCC Docs
@Peter學程式 感謝大大的回覆
看了大大您提供的補充
這樣好像只能說明到2和3使用的是相同的!?
還是不能解釋為何1是使用最多的對嗎?
我其實有在懷疑是不是題目或答案有誤XDD~
但我看過幾版的內容答案都一樣
只不過第五版1原本是寫int 而新版改成long long int
雖然答案都還是一樣哈哈
st474ddr
你提供的問答串有人提到:
The C standard doesn't state many storage requirements. As it is, you could have:
256-bit C ints that take 32 bytes to store anything (see @nonnb's comment)
我想這應該就是答案(雖然很怪 XDD)
那題目的意思其實是說
你能使用這些型態 盡可能去浪費最大空間嗎XD
st474ddr
因為題目的答案在那邊,我只能盡量把題目變成我們想要的形狀 XDDD
還是說,你可以考慮寫信給白算盤的作者,或是查查這本書有沒有勘誤表(搞不好答案是錯的)。
我寫信了
我之前也查了勘誤表
這一部分並沒有被改掉