Почему Integer.bitCount() возвращает 8 для ввода 255?

55
7

API Java для Integer.bitCount() сообщает нам:

"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 Complement = " + new String(tc));

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


Я получаю этот вывод:
Число = 255
Binary = 11111111
Two Complement = 00000001
Количество бит = 8

Почему я получаю 8 вместо 1?

спросил(а) 2014-02-01T00:10:00+04:00 6 лет, 5 месяцев назад
1
Решение
153

Представление двух дополнений относится к отрицательным числам. Два дополнительных представления положительного числа - это само число.

Например, Integer.bitCount(-1) возвращает 32, потому что два дополнительных представления -1 - это значение со всеми 1 (32 из них для int).

Но 255 не является отрицательным числом, поэтому его два дополнительных представления - это значение 255 (которое имеет 8 1 в своем представлении).

ответил(а) 2014-02-01T00:16:00+04:00 6 лет, 5 месяцев назад
40

Потому что 8 - количество бит в 11111111. Ваш шаг по набору двойного положительного числа недействителен.

ответил(а) 2014-02-01T00:32:00+04:00 6 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема