位運算--求一個 數二進位制中1的個數
1.五種位運算:
(1)&(與)–有0則0;無0則1;
(2)|(或)–有1則1,無1則0;
(3)^(亦或)–相同為0,不同為1;
(4)>>右移(最右邊的位被拋棄)
正數,最左邊添0;00001010>>3=00000001
負數,最左邊添1;10001010>>3=11110001
(5)<<左移(最左邊的位被拋棄)–最右邊統一添0;
(正數)00001010<<3=01010000
(負數)10001010<<3=01010000
2.求一個 數二進位制中1的個數:
方法1:
//迴圈32次
#include<iostream>
using namespace std;
int NumberOf1(int n)//有符號的n
{
int count=0;
int flag=1;
while (flag)
{
if (n&flag)
{
count++;
}
flag=flag<<1;//左移一位
}
return count;
}
int main()
{
cout<<NumberOf1(9)<<endl;//1001
cout<<NumberOf1(15)<<endl;//1111
return 0;
}
方法2:
//迴圈1的個數次
#include<iostream>
using namespace std;
int NemberOf1(int n)
{
int count =0;
while (n)
{
count++;
n=n&(n-1);
}
return count;
}
int main()
{
cout<<NemberOf1(9)<<endl;//1001
cout<<NemberOf1(15)<<endl;//1111
return 0;
}
測試:
int main()
{
cout<<NumberOf1(1)<<endl;
cout<<NumberOf1(9)<<endl;
cout<<NumberOf1(0x7FFFFFFF)<<endl;
cout<<NumberOf1(0)<<endl;
cout<<NumberOf1(0x80000000)<<endl;
cout<<NumberOf1(0x80000007)<<endl;
cout<<NumberOf1(0xFFFFFFFF)<<endl;
return 0;
}
3.判斷一個整數是不是2的整數次方
分析:一個整數如果是2的正數次方,那麼這個正數的二進位制位中只有一個1;
只需要一句語句就可以判斷:假設這個正數為n:只需判斷n&(n-1)是否為0;
#include<iostream>
using namespace std;
bool fun(int n)
{
if (n&n-1)
{
return false;
}
return true;
}
int main()
{
cout<<fun(1)<<endl;
cout<<fun(2)<<endl;
cout<<fun(8)<<endl;
cout<<fun(10)<<endl;
return 0;
}
4.輸入兩個整數m和n,計算需要改變m二進位制中的多少位才能得到n;
如:10:1010;13:1101,則需要改變10的二進位制的後三位才能得到1101;
#include<iostream>
using namespace std;
int ChangeBit(int m,int n)
{
int count=0;
int k=0;
k=m^n;//兩個數按位亦或,相同的位全變為0;不同的位全變為1;不同的位就是要改變的數位
while (k)//求按位亦或結果二進位制位中1的個數
{
count++;
k=k&(k-1);
}
return count;
}
int main()
{
cout<<ChangeBit(10,13)<<endl;
cout<<ChangeBit(0xFFFFFFFF,0x80000000)<<endl;
return 0;
}
相關文章
- 二進位制中1的個數
- 1的個數 【位運算】
- 【劍指offer】二進位制中1的個數
- JZ-011-二進位制中 1 的個數
- 【刷演算法】二進位制中1的個數演算法
- 二進位制求5個1的格式。。。。
- 劍指 Offer 15. 二進位制中1的個數
- 二進位制與二進位制運算
- 二進位制、位運算、位移運算
- java二進位制運算十進位制(精確運算)Java
- offer通過--10二進位制中統計1的個數-2
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- 三種語言實現計算二進位制中1的個數(C++/Python/Java)C++PythonJava
- 第一章:位運算-------輸入浮點數,輸出對應二進位制數
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 二進位制數的運算原理與閘電路實現
- 對於十進位制數 -1023,包含符號位在內,至少需要多少個二進位制位表示該數符號
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 知多一點二進位制中的負數
- 1417 二進位制數的大小
- 負數的二進位制數問題
- 輸出二進位制數
- 根據數字二進位制下 1 的數目排序排序
- 位運算-判斷一個數是否為2的整數次方
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 計算機中的二進位制計算機
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 二進位制漏洞挖掘之整數溢位
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制中為什麼負數是正數取反再加一
- 力扣 根據數字二進位制下1的數目排序力扣排序
- 教你如何進行數倉字串、二進位制、十六進位制互轉字串
- leetcode 191 位1的個數LeetCode
- 負數補碼(16進位制轉10進位制的負數)
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 二進位制運算加減乘除+快速冪
- 一個簡單的二進位制加法器
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式