2 c
我对以下打印输出有疑问:
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);
Run Code Online (Sandbox Code Playgroud)
输出:计数:3119849472,计数2:4294967296
为什么这两个给出不同的价值?
ssize_t
Run Code Online (Sandbox Code Playgroud)
是签名类型.在ssize_t 32位(或更小)的实现中,此表达式:
(ssize_t)1<< 32
Run Code Online (Sandbox Code Playgroud)
调用未定义的行为.
从C标准:
(c99,6.5.7p4)"如果E1具有带符号类型和非负值,并且E1 x 2 E2在结果类型中可表示,那么这就是结果值;否则,行为是未定义的."
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |