我想在C中编写一个函数rand_bit_string(int k, int n)
,它生成一个长度为n
的随机位串,其中包含k
个。
我的问题是,如何设计一个表示长度为n
的位串的数据结构。 C中最小的数据类型是char
,其中包含8位。所以我想回一个指向char
数组的第一个元素的char
指针。数组的大小必须是n/sizeof(char)
的上限。
答案 0 :(得分:1)
sizeof(char)
始终为1,因此将n
除以它将无效。
char
中的分配大小可以计算为(n+7)/8
。在执行整数除法之前将7
添加到n
可确保在n
不能被8
整除的情况下有足够的空间。
就返回值而言,您可以返回char*
,但调用者需要保持他们通过的n
与他们返回的char*
之间的连接。或者,您可以创建struct
以将两者保持在一起:
struct bit_sequence {
char *bits;
size_t n;
};
您还可以添加用于访问bit_sequence
位的函数,例如
int get_bit(bit_sequence *seq, size_t index) {
if (index > seq->n) {
// Report an error
}
size_t pos = index / 8;
size_t bit = index % 8;
return 1 & ((seq->bits[pos]) >> bit);
}