Java 最小位程序

Java 最小位程序,java,c++,algorithm,Java,C++,Algorithm,我是Java新手。我试图及时从Java学习它 作者: 所以,我们需要一个程序来计算代表一个给定值需要多少位 不同值的数目 计划是: int numberOfValues = Integer.parseInt(args[0]); int noOfBits = 0; while (Math.pow(2, noOfBits) < numberOfValues) noOfBits = noOfBits + 1; int numberOfValues=Integer.parseInt(arg

我是Java新手。我试图及时从Java学习它

作者:

所以,我们需要一个程序来计算代表一个给定值需要多少位 不同值的数目

计划是:

int numberOfValues = Integer.parseInt(args[0]);
int noOfBits = 0;

while (Math.pow(2, noOfBits) < numberOfValues)
  noOfBits = noOfBits + 1;
int numberOfValues=Integer.parseInt(args[0]);
int noOfBits=0;
while(Math.pow(2,noOfBits)
但这本书的作者被要求用另一个版本来写

作者:

在本任务中,您将编写MinimumBitWidth程序的一个变体,它的工作效率稍高一些。您的版本将在一个单独的变量中累积2到
noOfBits
的幂,而不是在每次迭代时计算循环条件中2的幂。这可以通过将新变量初始化为
1
,并在每次递增
noOfBits
时将其值加倍来实现

您将使用与先前版本程序相同的测试数据


也许是因为英语不好,我不明白他的意思。谢谢你的帮助。:)

这意味着将数字与20、21。。。231 由于231大于Integer.MAX_值,因此可以使用长字符

int noOfBits = 0;
long pow2 = 1;
while (numberOfValues >= pow2) {
    ++noOfBits;
    //pow2 = 2 * pow2
    //pow2 += pow2;
    //pow2 *= 2;
    pow2 <<= 1; // Shift left once.
}

java和C++是不一样的,或者类似于C++。你为什么要用那个标签?我需要的不仅仅是算法。他的意思是不要每次从头开始重新计算Math.pow(2,noOfBits)
:保存你在上一个循环中计算的值,并在下一个循环中更新以进行测试。请注意,您也可以使用
@Jongware“Java与C++不同”:您是认真的吗?
2^(noOfBits+1)=2*2^noOfBits
int noOfBits = 32 - Integer.numberOfLeadingZeros(numberOfValues);