为什么Integer.bitcount()返回8的输入255



integer.bitcount()告诉我们的java api:

" public static int bitcount(int i)

返回指定INT值的两者补充二进制表示中的一位数。此功能有时称为人口计数。

返回: 指定int值的两者补充二进制表示中的一位数量。自从: 1.5"

因此,如果我们服用255并将其转换为二进制文件,我们将获得11111111。如果我们将其转换为两者的补充版本,我们将获得00000001,将其数量为一位。但是,如果我运行此代码:

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 s)。

,因为8是11111111中的位数。

相关内容

  • 没有找到相关文章

最新更新