我正在写一个汉明重量计算器,但是为什么数字3对uint32_t来说太大了?
编写一个函数,该函数接受一个无符号整数,并返回它所拥有的'1‘位数(也称为Hamming重量)。
注意:
注意,在一些语言中,例如Java,没有无符号整数类型。在这种情况下,输入将被赋予一个有符号的整数类型。它不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部二进制表示都是相同的。
在Java中,编译器使用2的补码表示法表示有符号整数。因此,在示例3中,输入表示有符号整数。-3.
// package LeetCode Problem.Problem 2;
// Write a function that takes an unsigned integer and returns the number of '1'
// bits it has (also known as the Hamming weight).
#include <iostream>
using namespace std;
int hammingWeight(uint32_t n);
class BitShifting {
public:
uint32_t n;
int hammingWeight(uint32_t n);
void setn(uint32_t n);
};
void BitShifting::setn(uint32_t n) {
n = n;
}
int BitShifting::hammingWeight(uint32_t n) {
int count = 0;
while (n) { // while n > 0
count += n & 1; // n&1 is a bit comparison for binary ends; returns 0 or 1
// that if true would += 1;
n = n >> 1; // Shift n to the right for one bit
}
return count;
}
int main() {
BitShifting n1, n2, n3;
n1.n = 00000000000000000000000000001011;
n2.n = 00000000000000000000000010000000;
n3.n = 11111111111111111111111111111101;
cout << endl
<< "The hamming weight of Input 1 is: " << n1.hammingWeight(n1.n) << endl
<< "The hamming weight of Input 2 is: " << n2.hammingWeight(n2.n) << endl
<< "The hamming weight of Input 3 is: " << n3.hammingWeight(n3.n);
return 0;
}发布于 2022-01-15 06:44:24
要以二进制格式输入文字,您需要有前缀0b,就像在0b11111111111111111111111111111101中一样。
比较而言,0是八进制数的前缀(011甚至不是小数点11,它是小数点9),0x是十六进制数的前缀。
发布于 2022-01-15 06:44:44
因为11111111111111111111111111111101是一个十进制数。
您可能需要一个二进制数:0b11111111111111111111111111111101
除此之外,您的setn成员函数无法工作。n = n将本地n分配给本地n。若要将成员变量赋值给成员变量,请更改局部变量的名称或将其赋值如下:
void BitShifting::setn(uint32_t n) {
this->n = n;
}发布于 2022-01-15 06:44:10
void BitShifting::setn(uint32_t n) {
n = n;
}方法参数n阴影类成员变量n。所以这个函数什么也不做。重命名参数或成员变量。
https://stackoverflow.com/questions/70719383
复制相似问题