计算 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;
}
}
}
参考链接
特此记录
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日