标签:15 数字 二进制 lowbit 一位 int 801 AcWing
题目链接:https://www.acwing.com/problem/content/803/ 位运算
n 的二进制表示中第 k 位是几?
假设 n=15=(1111)2
①先把第 k 位移到最后一位 n>>k
②看个位是几 x&1
两步合起来可以这样表示:n>>k&1
位运算“&”可以判断变量 x 的奇偶性:
x&1 = 0(偶数)
x&1 = 1(奇数)
lowbit(x):返回 x 的最后一位“1”及后面的数字,比如:
x=1010 lowbit(x)=10
x=101000 lowbit(x)=1000
思路:
对于每个数字a,a&1得到了该数字的最后一位,之后将a右移一位,直到最后一位,就得到了1的个数
放AC代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n,a,k; 6 cin>>n; 7 for(int i=0 ;i<n; i++) 8 { 9 k=0; 10 cin>>a; 11 while(a) 12 { 13 k+=a&1; 14 a=a>>1; 15 } 16 cout<<k<<" "; 17 } 18 return 0; 19 }
标签:15,数字,二进制,lowbit,一位,int,801,AcWing 来源: https://www.cnblogs.com/marswithme/p/16523092.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。