我受的size_t
一些行爲,我注意到困惑大得多:爲size_t爲0x1 << 31比爲size_t爲0x1 << 30
size_t zero = 0x1 << 32;
size_t big = 0x1 << 31;
size_t not_as_big = 0x1 << 30;
printf("0x1<<32: %zx\n0x1<<31: %zx\n0x1<<30: %zx\n", zero, big, not_as_big);
結果:
0x1<<32: 0
0x1<<31: ffffffff80000000
0x1<<30: 40000000
現在,我明白了size_t
只保證至少是一個16位無符號整數,但我不明白爲什麼0x1<<31
結束了它所做的值 - 試圖分配18艾字節在我的程序上做了一個數字。
我在x86_64上使用LLVM。
符號擴展... – Mysticial