gpt4 book ai didi

c - size_t modulo long unsigned int 的意外结果

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:52 24 4
gpt4 key购买 nike

在下面的代码中,BITS_IN_INT 是一个 long unsigned int,值为 32。为什么模运算返回值 0 而不是预期的 20

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define BITS_IN_INT sizeof(int) * CHAR_BIT

int main()
{
size_t i = 20;

printf("%zu\n", i);
printf("%lu\n", BITS_IN_INT);
printf("%lu\n", i % BITS_IN_INT);
return 0;
}

最佳答案

在宏扩展之后,最后的 printf 看起来像:

printf("%lu\n", i % sizeof(int) * 8);

因此,表达式(在 printf 中)的计算方式如下:

(i % sizeof(int)) * 8

如果 sizeof(int) 为 4(在您的平台上似乎是这样),则 i % sizeof(int) 产生 0; 0 * 80

如果可以,请避免使用宏。如果不是,请始终在宏周围使用括号:

#define BITS_IN_INT (sizeof(int) * CHAR_BIT)

注意:%zu 是打印 size_t 值的正确格式说明符。

关于c - size_t modulo long unsigned int 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957615/

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