首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么它抱怨整数常量对其类型来说太大了?

为什么它抱怨整数常量对其类型来说太大了?
EN

Stack Overflow用户
提问于 2022-01-15 06:41:10
回答 3查看 146关注 0票数 -1

我正在写一个汉明重量计算器,但是为什么数字3对uint32_t来说太大了?

编写一个函数,该函数接受一个无符号整数,并返回它所拥有的'1‘位数(也称为Hamming重量)。

注意:

注意,在一些语言中,例如Java,没有无符号整数类型。在这种情况下,输入将被赋予一个有符号的整数类型。它不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部二进制表示都是相同的。

在Java中,编译器使用2的补码表示法表示有符号整数。因此,在示例3中,输入表示有符号整数。-3.

代码语言:javascript
复制
// 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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-15 06:44:24

要以二进制格式输入文字,您需要有前缀0b,就像在0b11111111111111111111111111111101中一样。

比较而言,0是八进制数的前缀(011甚至不是小数点11,它是小数点9),0x是十六进制数的前缀。

票数 4
EN

Stack Overflow用户

发布于 2022-01-15 06:44:44

因为11111111111111111111111111111101是一个十进制数。

您可能需要一个二进制数:0b11111111111111111111111111111101

除此之外,您的setn成员函数无法工作。n = n将本地n分配给本地n。若要将成员变量赋值给成员变量,请更改局部变量的名称或将其赋值如下:

代码语言:javascript
复制
void BitShifting::setn(uint32_t n) {
  this->n = n;
}
票数 2
EN

Stack Overflow用户

发布于 2022-01-15 06:44:10

代码语言:javascript
复制
void BitShifting::setn(uint32_t n) {
  n = n;
}

方法参数n阴影类成员变量n。所以这个函数什么也不做。重命名参数或成员变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70719383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档