計算一個二進位制數中數字“1”的個數(位運算)
int numberOfOne( unsigned value )
{
int count;
for( count = 0; value != 0; value >>= 1 )
if( ( value & 1 ) != 0 )//如果最低位是1,就增加計數器的值
count += 1;
return count;
}
筆記:
- value >>= 1 即 value = value >> 1;
賦值運算右邊的 value >> 1 意思是把無符號數value進行向右1位的邏輯移位,然後再賦值給左邊的value。
假設value原來等於10010110,則向右移1位後變成01001011。
這樣把 value >>=1 作為 for 迴圈的調整語句,即可依次把每個數字都放到最低位上去進行運算。 - value & 1 即把 value 和 1 進行AND操作,如果兩個個位都是1,結果為1,否則結果為0。
這樣就可以很快捷的檢驗每次位移後的數字的最後一位是否為1,如果是1,則結果為1,否則結果為0。
相關推薦
計算一個二進位制數中數字“1”的個數(位運算)
int numberOfOne( unsigned value ) { int count; for( count = 0; value != 0; value >>= 1 ) if( ( value & 1 ) != 0 )//如果最低位是1,就增加計數器的
LeetCode 給定一個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。
/** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ int* countBit
求二進位制數中的1的個數
第一種最常見的解法: 原理是:採用C語言十進位制轉換成二進位制的方法去解題 程式程式碼如下: #include "Count.h" int Count(char b) { int number = 0; while (b) {
二進位制數中返回1的個數的幾種方法
方法一:採用先模2再除2的方法,例如13模2結果是1,這個1就是二進位制數中最後一個1,再除以2去除這一個位1,以此往復循化,當二進位制數全是零的時候就沒有1了,迴圈結束。但是此方法只適用於正數。 int main() { int num = 13;//1101 int cou
利用異或判斷二進位制數中的1的個數的奇偶性
文章目錄 異或壓縮奇偶性資訊 一位一位地異或 利用二叉樹思想異或 關於有符號數和算術右移 利用x &= x-1求二進位制1個數 利用邏輯右移求二進位制1個數 兩個二進位制數異或後結果的1個數的奇偶性 異或
編寫一個Java 應用程式,計算兩個大整數的和、差、積和商,並計算一個大整數的因 子個數(因子中不包括1 和大整數本身)。
1 package ex6_2; 2 import java.math.BigInteger; 3 4 public class BigintegerExample { 5 public static void main(String[] args) { 6
【面試題】劍指offer10--求一個數的二進位制數中的1的個數
求一個數二進位制數中的個數 第一種方法:模除法 程式碼如下: //Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的 //1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入
判斷二進位制數中的1有奇數個還是偶數個
判斷(32位)整數的二進位制表示中的1有奇數個還是偶數個 最直接的思路就是求二進位制數中1的個數,然後確定是偶數還是奇數。 程式碼如下: // true為x二進位制表示中含有奇數個1,false為偶數個1 bool OddOnes(int x) {
求二進位制包含的1的個數(位操作)
public class Qiu { int count(byte a){ int num =0; while(a!=0){ //與操作 num
統計一個字串中單詞的個數(C語言)
#include<stdio.h> #include<stdlib.h> int main() { int num = 0, word = 0; char *p = NULL; p = (char *)malloc(sizeof(char)*100);
使用函式統計指定數字的個數 (10 分)
#include <stdio.h> int CountDigit( int number, int digit ); int main() { int number, digit; scanf("%d %d", &number, &digit
NYOJ100. 1的個數(位運算&位操作)
1的個數 時間限制:3000 ms | 記憶體限制:65535 KB 難度:1 描述小南剛學了二進位制,他想知道一個數的二進位制表示中有多少個1,你能幫他寫一個程式來完成這個任務嗎? 輸入第一行輸入一個整數N,表示測試資料的組數(1<N<10
java Integer中的方法解析(位操作)
方法 描述 static int bitCount(int i) 返回i的二進位制中1的個數. static int compare(int x, int y)
python中的布林型別(布林運算)與空值
程式清單: #val_bool.py print('bool test') print(True) print(False) print(1>0) print(1<0) print("\nand:") print(True and False) print(2
求一組數的出現一次的數(位運算)
a^a=0 ; a^0=a; 一個數只出現一次,可以將整個陣列進行^處理,相同的會為0,直到出現一次的數^後即為它本身。 有a、b兩個數只出現一次,可以先將整個陣列^處理,得到c,c =a^b,找出
Java計算二進位制數中1的個數
前言 逐位法 查表法 Brian Kernighan法 分治法 Hamming Weight法 Hamming Weight優化法 Hamming Weight乘法優化法 MIT HAKMEM 169演算法 江峰求一演算法 分治法
計算一個自然數的二進位制表示中的“1”的個數
1 /* * 計算一個自然數的二進位制表示中的“1”的個數 * 用遞迴演算法 */ public class recursionTest { public static void main(String[] args) { for(
Java實現求一個整數的二進位制數中1的個數
這題還是筆試的時候遇到的,當時沒有想太多,直接用了最為直接的移位相加的方法,雖然可以得出結果,但是程式效率低。 後來發現使用n=n&(n-1)的方法,效率會更高,先上程式碼。 <span
求一個int型二進位制數中1的個數
#include <stdio.h> int main(int argc, const char *argv[]) { int i = 0; int a = 0; int n = 0; printf("please enter a int:"); scanf
演算法題:求N!末尾0的個數和求二進位制數中1的個數
1、給定一個整數,那麼N的階乘N!末尾有多少個0呢? 解題思路:N!=K*10^M,M的值即為N!末尾0的個數。又10^M=(2^M)*(5^M),因為一個數進行質因數分解後,2出現的概率比5大得多。所以只有計算出1到N包含多少個5的因子 public class demo2 {