【发布时间】:2010-11-04 20:16:58
【问题描述】:
首先,这可以是任何语言的通用算法,但我正在学习 C,如果有一些 C 特定的功能,我想知道!
我正在编写一个函数,它将为给定的位数分配足够的内存;进入long long * 变量。位数不能为< 1。我测试了算法:
int bits; // the function argument, checked for value > 0
size_t dataSize; // the value passed to the malloc function
for (bits = 1; bits<100; bits++) {
if (bits < sizeof(long long)) {
dataSize = 1;
} else {
dataSize = (bits + (sizeof(long long) - (bits % sizeof(long long)))) / sizeof(long long);
}
printf("%d = %d\n", bits, (int) dataSize);
}
看起来不错...但丑陋:) 有什么方法可以更优雅地实现这一目标? 谢谢!
【问题讨论】:
-
我不完全理解你的问题。你不能只做 dataSize = sizeof(int) * bits + padding 吗?除了最低限度之外,填充是您要分配的额外字节
-
对所有答案的评论,真的,但是当有一个非常好的宏 CHAR_BIT 可以使答案更便携时,为什么要假设一个字节中有 8 位?
标签: c bit-manipulation