gpt4 book ai didi

java - 为什么输入 255 时 Integer.bitCount() 返回 8?

转载 作者:行者123 更新时间:2023-12-02 14:29:21 28 4
gpt4 key购买 nike

Integer.bitCount() 的 Java API告诉我们:

“公共(public)静态int bitCount(int i)

返回指定 int 值的二进制补码二进制表示形式中的一位数。此函数有时称为人口计数。

返回: 指定 int 值的二进制补码二进制表示形式中 1 位的数量。自从: 1.5"

因此,如果我们将 255 转换为二进制,我们会得到 11111111。如果我们将其转换为二进制补码版本,我们会得到 00000001,从而使一位数变为 1。但是,如果我运行此代码:

import java.lang.*;

public class IntegerDemo {

public static void main(String[] args) {

int i = 255;
System.out.println("Number = " + i);

/* returns the string representation of the unsigned integer value
represented by the argument in binary (base 2) */
System.out.println("Binary = " + Integer.toBinaryString(i));

/* The next few lines convert the binary number to its two's
complement representation */
char[] tc= Integer.toBinaryString(i).toCharArray();
boolean firstFlipped = true;
for (int j = (tc.length - 1); j >= 0; j--){
if (tc[j] == '1'){
if(firstFlipped){
firstFlipped = false;
}
else{
tc[j] = '0';
}
}
else {
tc[j] = '1';
}
}

// Casting like this is bad. Don't do it.
System.out.println("Two's Complement = " + new String(tc));


System.out.println("Number of one bits = " + Integer.bitCount(i));
}
}


我得到这个输出:
数量 = 255
二进制 = 11111111
二进制补码 = 00000001
一位数 = 8

为什么我得到的是 8 而不是 1?

最佳答案

二进制的补码表示是关于负数的。正数的补码表示就是该数本身。

例如,Integer.bitCount(-1) 返回 32,因为 -1 的二进制补码表示是一个全 1 的值s(其中 32 个用于 int)。

但是 255 不是负数,因此它的二进制补码表示形式是值 255 本身(其表示形式中有 8 个 1)。

关于java - 为什么输入 255 时 Integer.bitCount() 返回 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21490117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com