计算 char 数组中 1 和 0 的个数
Counting number of ones and zeros inside char array
我正在尝试制作自定义代码,以在将元素转换为二进制形式后计算 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;
}
}
}
你的代码有问题:
bits_num
参数应该代表什么?它似乎是每个数组元素的位数,但是您在第一个字节之后将其强制返回8
。
- 为什么
sizeof_array
有一个类型 short
?该数组可能具有更大的大小,尤其是在现代系统中。
- 右移带符号的类型会带来麻烦:您应该使用
unsigned char
,因为 char
类型可能在某些体系结构上默认带符号,右移负值是实现定义的。
- 修改数组以计算位数是一个不好的副作用。
这是一个更简单的版本:
void counter(int bits_num, size_t array_size, const char *array) {
for (size_t i = 0; i < array_size; i++) {
unsigned char x = (unsigned char)array[i];
int bits = 0;
for (int j = 0; j < bits_num; j++) {
bits += x & 1;
x >>= 1;
}
printf("zeros number is %d, ones number is %d in element %x\n",
bits_num - bits, bits, i);
}
}
我正在尝试制作自定义代码,以在将元素转换为二进制形式后计算 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;
}
}
}
你的代码有问题:
bits_num
参数应该代表什么?它似乎是每个数组元素的位数,但是您在第一个字节之后将其强制返回8
。- 为什么
sizeof_array
有一个类型short
?该数组可能具有更大的大小,尤其是在现代系统中。 - 右移带符号的类型会带来麻烦:您应该使用
unsigned char
,因为char
类型可能在某些体系结构上默认带符号,右移负值是实现定义的。 - 修改数组以计算位数是一个不好的副作用。
这是一个更简单的版本:
void counter(int bits_num, size_t array_size, const char *array) {
for (size_t i = 0; i < array_size; i++) {
unsigned char x = (unsigned char)array[i];
int bits = 0;
for (int j = 0; j < bits_num; j++) {
bits += x & 1;
x >>= 1;
}
printf("zeros number is %d, ones number is %d in element %x\n",
bits_num - bits, bits, i);
}
}