計算 x 的二進制表示中 1 的個數
代碼如下:
int func(int x){int countx = 0;while (x>0){countx++;x = x & (x - 1);}return countx;}
完整代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){textBox2.Text = func(Convert.ToInt32(textBox1.Text)).ToString();}int func(int x){int countx = 0;while (x>0){countx++;x = x & (x - 1);}return countx;}}
}
參考鏈接
五個C語言筆試題,看看能做對幾個? (qq.com)https://mp.weixin.qq.com/s?__biz=MzI3MDYwNDczNg==&mid=2247488733&idx=1&sn=be345813c532c25d568f50649a046a31&chksm=eacfd472ddb85d6411c23f5200a8bbca7ac6f449062664e8f8d913f3069538c68929ce494e21&mpshare=1&scene=1&srcid=0601W9oUFxeeiIfpgeKihV2w&sharer_shareinfo=6603a5e97825999a442de3924e05b1ce&sharer_shareinfo_first=8664777b365f154110e1e3faab85f5b3#rd
特此記錄
anlog
2024年6月2日
計算一個數的二進制表示中1的個數是一個經典的問題,也被稱為“漢明重量”問題。有多種方法可以解決這個問題,其中一種常見的方法是利用位運算的性質進行計算。具體來說,可以不斷地將原數與1進行按位與運算,然后再將原數右移一位,直到原數變為0為止。每次按位與運算的結果如果為1,則說明當前二進制位上的數字為1,累加1即可。以下是一個示例代碼:
int countOnes(int n) {int ones = 0;while (n != 0) {ones += n & 1;n >>= 1;}return ones;
}
計算二進制中1的方法有很多種,以下是幾種常見的方法:
- 暴力法:依次判斷二進制數的每一位是否為1,統計1的個數。
- 移位法:將二進制數不斷右移一位,并判斷最右邊的位是否為1,統計1的個數。
- 位運算法:利用位運算中的&(與)操作符,將二進制數的最后一位與1進行與操作,判斷是否為1,然后將該數右移一位。不斷重復該過程直到該數為0。
除了以上三種方法外,還有其他一些更高效的方法,比如分組查表法、二進制分治法等。在實際應用中,應根據具體情況選擇不同的方法。
特此記錄
anlog
2024年6月2日