gpt4 book ai didi

c - 如何在c中声明与int的位大小相对应的数组?

转载 作者:行者123 更新时间:2023-11-30 15:58:41 25 4
gpt4 key购买 nike

基本上我需要这样的东西:

#if (sizeof(int) * CHAR_BIT) == 32
INT_MASKS[32] = {
0x00000001, 0x00000003, 0x00000007, 0x0000000F,
0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
...
};
#elif (sizeof(int) * CHAR_BIT) == 64
INT_MASKS[64] = {
0x0000000100000001, 0x0000000300000003, 0x0000000700000007, 0x0000000F0000000F,
0x0000001F0000001F, 0x0000003F0000003F, 0x0000007F0000007F, 0x000000FF000000FF,
...
};
#else
#error unsupported architecture
#endif;

每个 #if#else 分支中不止一个数组,因此等效工作将为我节省大量空间。另外,一些数组包含大量表达式,我想在编译期间对其进行评估。感谢您的回复。

最佳答案

gcc et al 定义 __INT_MAX__ - 您可以将其用于 gcc 和 gcc 兼容编译器,然后可以为您需要支持的任何其他编译器显式定义它:

#if __INT_MAX__ == 0x7fffffff
INT_MASKS[32] = {
0x00000001, 0x00000003, 0x00000007, 0x0000000F,
0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
...
};
#elif __INT_MAX__ == 0x7fffffffffffffff
INT_MASKS[64] = {
0x0000000100000001, 0x0000000300000003, 0x0000000700000007, 0x0000000F0000000F,
0x0000001F0000001F, 0x0000003F0000003F, 0x0000007F0000007F, 0x000000FF000000FF,
...
};
#else
#error unsupported architecture
#endif

关于c - 如何在c中声明与int的位大小相对应的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592398/

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