C語言中的long型究竟占4個字節(jié)還是8個字節(jié)(遇到的坑)
今天在復(fù)習C語言的時候踩了一個很有意思的坑。
#include <stdio.h> int main() { printf("long int : %d\n", sizeof(long)); return 0; }
上面是我在IDE中使用的測試代碼,執(zhí)行它我的第一反應(yīng)是會得到 4 的長度。
但實際的結(jié)果如下圖所示:
是的,沒看錯,long的長度是8個字節(jié)。我所認識到的長整型long不應(yīng)該是4個字節(jié)嗎。
那會不會與編譯器的有關(guān)?
隨機我用mingw32也跑了一次,結(jié)果依舊是8。于是我更換了msvc32和64分別執(zhí)行,跑下來的結(jié)果仍然是8個長度。
既然和系統(tǒng)位數(shù),mingw,msvc都沒有關(guān)系,那就是系統(tǒng)環(huán)境了。(由于我沒有裝WLS2)所以沒有立馬發(fā)現(xiàn)問題。
當前我使用的系統(tǒng)是MacOS,于是我在windows Pc上繼續(xù)執(zhí)行了上面的程序。結(jié)果對比如下。(使用的都是CLion,MinGW64)
windows64環(huán)境下:
MacOS64環(huán)境下:
根據(jù)上面的對比可以發(fā)現(xiàn),在MacOS環(huán)境下,long的長度位8個字節(jié),要比windows多出四個字節(jié)。
長整型long在不用的操作系統(tǒng)中所占用的字節(jié)數(shù)如下圖:
long在linux64環(huán)境下所占用字節(jié)位8,也就間接說明了long在macOS下的字節(jié)長度也是8。(這是因為MacOS系統(tǒng)和Linux都是類Unix系統(tǒng),只不過基于不同的內(nèi)核)
所以,在寫跨平臺的應(yīng)用時,如果使用到long型,需要考慮到精度丟失的問題,在寫跨平臺應(yīng)用時也盡量避免使用long型。
參考文章:
long 在不同操作系統(tǒng)下所占用的字節(jié)數(shù)
到此這篇關(guān)于C語言中的long類型是究竟占4個字節(jié)還是8個字節(jié)?的文章就介紹到這了,更多相關(guān)C語言long類型字節(jié)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)LeetCode(136.單獨的數(shù)字)
這篇文章主要介紹了C++實現(xiàn)LeetCode(136.單獨的數(shù)字),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C++語言中std::array的用法小結(jié)(神器用法)
這篇文章主要介紹了C++語言中std::array的用法小結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11C語言中main函數(shù)與命令行參數(shù)詳細講解
這篇文章主要為大家詳細介紹了C語言main()函數(shù)與命令行參數(shù)問題,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-04-04