【发布时间】:2017-01-14 14:11:45
【问题描述】:
在将元素转换为二进制形式后,我正在尝试制作自定义代码来计算 char 类型数组的每个元素中的零和一的数量。这是我的代码。如果有更好的写法,请提出来。这项工作适用于嵌入式系统。提前致谢。
void counter(unsigned short bits_num, short sizeof_array, char array[]) {
unsigned char zero = 0, one = 0;
while (bits_num && sizeof_array) {
if (array[sizeof_array - 1] & 1)
one++;
else
zero++;
array[sizeof_array - 1] = array[sizeof_array - 1] >> 1;
bits_num--;
if (!bits_num) {
bits_num = 8;
printf("zeros number is %i, ones number is %i in element: %x\n",
zero, one, sizeof_array - 1);
sizeof_array--;
zero = 0;
one = 0;
}
}
}
【问题讨论】:
-
while (bits_num&&sizeof_array){ 是什么意思?还有这个参数bits_num是什么意思?
-
@YasserMohamed 它是已知的并且等于 CHAR_BIT 。此外,char 类型的表示不包含填充位。
-
@Olaf 你错了。来自 C 标准“...signed char 不应有任何填充位”
-
@VladfromMoscow 好的,找到了。谢谢。 (他们为什么不把它和 unsigned char 备注放在一起。
-
@YasserMohamed——你可能会觉得this selection of methods for counting set bits很有趣。
标签: c customization