三亚网站制作,中国建设银行大沥网站,网站开发做什么的,深圳住房和城乡建设局网站首页偶然看到一份代码#xff0c;代码是计算一个int数中 ‘1’ 的个数的#xff0c;当然#xff0c;可能这不是什么值得讨论的事情#xff0c;但如果你看看大神如何写这段代码的#xff0c;就觉得这个是一个需要了解的知识。int count_bits(int x)
{register int xxx;xxxx-((… 偶然看到一份代码代码是计算一个int数中 ‘1’ 的个数的当然可能这不是什么值得讨论的事情但如果你看看大神如何写这段代码的就觉得这个是一个需要了解的知识。int count_bits(int x)
{register int xxx;xxxx-((xx1)0x55555555);xx(xx0x33333333)((xx2)0x33333333);xx(xx(xx4))0x0f0f0f0f;xxxx(xx8);return (xx(xx16)) 0xff;
}
咋一看如果没有接触过这个代码的人不看函数名的话很难看出这代码有什么用。然后我今天把这个题目发上了知乎竟然有网友看到过这个代码而且在评论留言。如下我承认这个是一个大神级的代码能写出这样代码的人智商肯定是在普通人之上的但是要是说这个代码的效率奇高我并不是很认同。我自己写了相同功能的代码 如下#include stdio.h
#include time.hint count_bits(int x)
{register int xxx;xxxx-((xx1)0x55555555);xx(xx0x33333333)((xx2)0x33333333);xx(xx(xx4))0x0f0f0f0f;xxxx(xx8);return (xx(xx16)) 0xff;
}int count_bits2(int x)
{int i 0;int s 0;for(i 0;i32;i){if(x0x01)s ;x x1;}return (s);
}int main(void)
{printf(%d\n,count_bits(12345678));printf(%d\n,count_bits2(12345678));
}
我这个代码接触过一两天代码的同学也能够看得懂。但是我写的这段代码就一定效率非常低下吗我并不觉得虽然我的代码算法复杂度是O(n)但是我的for循环里面固定是32你们可知道32是一个常数既然是常数我觉得就可以跟上面的代码比较比较。如果我的for循环会无限增大我觉得可以理解上面的代码可以秒杀我的代码。而且从可读性上来看我觉得我的代码可读性更加强一些。如果是有人来维护我的代码也会比较容易上手。但是大神这样写代码我们真的没有必要去研究吗我觉得不然我们了解这样的代码是为了方便我们更好的工作更好的去理解别人的思想。就像各个国家的语言有不同的语言有不同的表达方式我们学习他们是为了跟他们更好的交流。前两天我的知识星球有同学发了这样一张图片。程序员不仅是要和代码沟通还有和团队的人沟通还需要和团队以外的人沟通有时候还需要把代码的意思解释清楚给别人听这些都需要沟通能力。而程序员最重要的沟通能力就是和代码沟通毕竟你是一个程序员。ps:想 5 块钱加入知识星球讨论的请点击下面链接。我有个问题 回复「 篮球的大肚子」进入技术群聊回复「1024」获取1000G学习资料