小编mra*_*sen的帖子

size_t 0x1 << 31远大于size_t 0x1 << 30

size_t注意到的一些行为使我感到困惑:

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);
Run Code Online (Sandbox Code Playgroud)

结果是:

0x1<<32: 0
0x1<<31: ffffffff80000000
0x1<<30: 40000000
Run Code Online (Sandbox Code Playgroud)

现在,我明白size_t只保证至少是一个16位无符号整数,但我不明白为什么会0x1<<31结束它所做的值 - 尝试分配18 exabytes在我的程序上做了一个数字.

我在x86_64上使用LLVM.

c size-t

4
推荐指数
2
解决办法
466
查看次数

标签 统计

c ×1

size-t ×1