我在做leetcode问题时遇到了一个奇怪的问题。这是关于 Java 中的位表示。
编写一个函数,该函数接受一个无符号整数并返回它具有的“1”位数(也称为汉明权重)。
例如,32 位整数 '11' 的二进制表示为 00000000000000000000000000001011,因此该函数应返回 3。
我的解决方案是
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count = 0;
for(int i = 0; i < 32; ++i){
if((n >>> i) % 2 == 1){
++count;
}
}
return count;
}
}
Run Code Online (Sandbox Code Playgroud)
由于输入大小写,此代码不被接受:
4294967295 (11111111111111111111111111111111)
我在java中查看了整数的位表示,但仍然不知道解决方案的问题?有人可以帮助我吗?
我试图测试的差异sizeof和strlen,但我发现了一些奇怪的今天.代码如下.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[]={"I am a boy"};
char b[]={'I',' ','a','m',' ','a',' ','b','o','y'};
cout << "sizeof(a) = " << sizeof(a) << endl << "sizeof(b) = " << sizeof(b) <<endl;
cout << "strlen(a) = "<< strlen(a) << endl << "strlen(b) = " << strlen(b) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
sizeof(a) = 11
sizeof(b) = 10
strlen(a) = 10
strlen(b) = 11
Run Code Online (Sandbox Code Playgroud)
我知道结果的前三行,但我不明白为什么strlen(b)是11.有人可以帮我吗?