当前位置:  开发笔记 > 编程语言 > 正文

计算char数组中的1和0的数量

如何解决《计算char数组中的1和0的数量》经验,为你挑选了1个好方法。



1> chqrlie..:

您的代码中存在问题:

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);
    }
}


*左移*负数未定义:*右移*负数是实现定义的.
我会添加你的答案,你可以通过使用:"one + =(x&1);"来消除分支.然后将零计算为"zero = bits_num - one;"
@EOF:这是真的,如果我们正在寻找原始性能,那么会有更多的想法需要开发,但我试图保持上述代码的可移植性和简单性,以便新手学习.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有