-1 c customization
我正在尝试制作自定义代码,以便在将元素转换为二进制形式后计算char类型数组的每个元素中的零和1的数量.这是我的代码.如果有更好的方法来写它,请提及它.这适用于嵌入式系统.提前致谢.
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码中存在问题:
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);
}
}
Run Code Online (Sandbox Code Playgroud)