c - 在 C 中声明我的 int 数组

标签 c arrays static int constants

我想用常量值初始化一个 int 数组,所有 2^n 值从 2^0 到 2^31 我想知道下面哪个方法是正确的,如果它给出我想要的结果,如果有初始化它的方法更简单或更短。

static const char     two_n[32];

two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
               8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
               2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
               268435456, 536870912, 1073741824, 2147483648};

static const char     *two_n[32];

two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
               8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
               2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
               268435456, 536870912, 1073741824, 2147483648};

static const int     two_n[32];

two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
               8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
               2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
               268435456, 536870912, 1073741824, 2147483648};

最佳答案

以上都不是,因为数组的类型和初始值设定项都不正确。使用 uint32_tunsigned long,因为它们保证至少为 32 位宽并且能够保存 231 的值,这可能超出int范围:

static const unsigned long two_n[32] = {
    1UL <<  0, 1UL <<  1, 1UL <<  2, 1UL <<  3,
    1UL <<  4, 1UL <<  5, 1UL <<  6, 1UL <<  7,
    1UL <<  8, 1UL <<  9, 1UL << 10, 1UL << 11,
    1UL << 12, 1UL << 13, 1UL << 14, 1UL << 15,
    1UL << 16, 1UL << 17, 1UL << 18, 1UL << 19,
    1UL << 20, 1UL << 21, 1UL << 22, 1UL << 23,
    1UL << 24, 1UL << 25, 1UL << 26, 1UL << 27,
    1UL << 28, 1UL << 29, 1UL << 30, 1UL << 31
};

关于c - 在 C 中声明我的 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834233/

相关文章:

c - 如何使用 fgets() 重新分配多个数组

c - 用\0初始化字符串数组

c++ - 调用 Singleton getInstance() 时出现 undefined symbol 错误

html - 使图像相对于其父容器具有静态位置?

c# - 如何在数据库的文本字段中存储 byte[] 并检索它

具有函数指针常量数组的 C++ 模板化静态类

c - 如何为拼图泡泡制作 "matrix"?

python - 在 Cython 中使用 zlib 压缩 NumPy 数组

c++ - 对齐大小数组和非对齐大小数组的速度不同

java - 自定义设计listview位置错误