gpt4 book ai didi

c - ssize_t 和 size_t 给出不同的值

转载 作者:行者123 更新时间:2023-12-02 08:32:57 25 4
gpt4 key购买 nike

我对以下打印输出有疑问:

int logn = 32;
size_t count = (size_t)1<<logn; /* explicit cast required */
ssize_t count2 = (ssize_t)1<<logn;

fprintf(stderr, "count: %zu, count2: %zd\n", count, count2);

输出:计数:3119849472,计数 2:4294967296

为什么这两个给出不同的值?

最佳答案

ssize_t

是有符号类型。在 ssize_t 为 32 位(或更少)的实现中,此表达式:

 (ssize_t)1<< 32

调用未定义的行为。

来自 C 标准:

(c99, 6.5.7p4) "If E1 has a signed type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined."

关于c - ssize_t 和 size_t 给出不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com