位運算--求一個 數二進位制中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的個數
- 二進位制中1的個數
- 求二進位制數中1的個數(程式設計之美)程式設計
- 求一個數的二進位制數中所含1的個數的程式碼實現
- 【c語言】統計一個數二進位制中的1的個數C語言
- 【劍指offer】二進位制中1的個數
- 【刷演算法】二進位制中1的個數演算法
- 題目1513:二進位制中1的個數
- 二進位制求5個1的格式。。。。
- 劍指 Offer 15. 二進位制中1的個數
- JZ-011-二進位制中 1 的個數
- 二進位制與二進位制運算
- 用c語言實現輸入一個十進位制數,計算其轉換為二進位制數後其中包含1的個數C語言
- 二進位制、位運算、位移運算
- 查詢數N二進位制中1的個數(JS版 和 Java版)JSJava
- java二進位制運算十進位制(精確運算)Java
- N位二進位制數加減法運算圖靈機圖靈
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- offer通過--10二進位制中統計1的個數-2
- 有趣的二進位制2—高效位運算
- poj3252 數位dp(所有比n小的二進位制位0的個數不少於1的個數)記憶化搜尋
- 第一章:位運算-------輸入浮點數,輸出對應二進位制數
- 產生一個32位的16進位制隨機數隨機
- 三種語言實現計算二進位制中1的個數(C++/Python/Java)C++PythonJava
- 二進位制數的運算原理與閘電路實現
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 知多一點二進位制中的負數
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 演算法學習記錄九(C++)--->二進位制中1的個數演算法C++
- 【c語言】求兩個數中不同的位的個數C語言
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- 負數的二進位制數問題
- 根據數字二進位制下 1 的數目排序排序
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 【c語言】將一個數的二進位制序列逆序,然後輸出逆序之後的二進位制序,所對應的數C語言
- JavaScript 二進位制數字轉換為十進位制JavaScript
- 對於十進位制數 -1023,包含符號位在內,至少需要多少個二進位制位表示該數符號