网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
}**图片解析** ![](https://img-blog.csdnimg.cn/20211007164716703.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA546E5r6IXw==,size_20,color_FFFFFF,t_70,g_se,x_16)
拓展思考
我们可以运用方法三的方式去解决另外一个问题
:如何判断一个数是不是2的n次方数(等价于判断二进制码中是否只有一个1)
我们可以这样:
if( n & (n - 1) == 0) { //n就是2的次方数 }
大家可以思考思考为什么哦?
题目:输入两个整数,求两个整数二进制格式有多少个位不同
方法一
int main() { int n1 = 0; int n2 = 0; scanf("%d%d", &n1, &n2); int count = 0; int i = 0; for (i = 0; i < 32; i++) { if (((n1 >> i) & 1) != ((n2 >> i) & 1)) count++; } printf("%d\n", count); return 0; }
也可以选择封装成一个函数哦
方法二
int main() { int n1 = 0; int n2 = 0; scanf("%d%d", &n1, &n2); int t = n1 ^ n2; int count = 0; while (t) { t = t & (t - 1); count++; } printf("%d\n", count); return 0; }
结合引入问题的方法来进行解决
补充题
打印整数二进制的奇数位和偶数位
int main() { int num = 0; scanf("%d", &num); int i = 0; for (i = 31; i >= 1; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); printf("奇数位\n"); for (i = 32; i >= 1; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); printf("偶数位"); return 0; }
这就是今天的全部内容啦,如果觉得有帮助的话,请给小玄:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!