Я экспериментировал с битовыми операциями в java
Я попытался установить битовый индекс по индексу, и это то, что у меня есть. Началась установка с 0-го бита в целочисленном от 0 до 31-го бита (так как int имеет максимум 32 бита)
value of0bits set: 1
value of1bits set: 3
value of2bits set: 7
value of3bits set: 15
value of4bits set: 31
value of5bits set: 63
value of6bits set: 127
value of7bits set: 255
value of8bits set: 511
value of9bits set: 1023
value of10bits set: 2047
value of11bits set: 4095
value of12bits set: 8191
value of13bits set: 16383
value of14bits set: 32767
value of15bits set: 65535
value of16bits set: 131071
value of17bits set: 262143
value of18bits set: 524287
value of19bits set: 1048575
value of20bits set: 2097151
value of21bits set: 4194303
value of22bits set: 8388607
value of23bits set: 16777215
value of24bits set: 33554431
value of25bits set: 67108863
value of26bits set: 134217727
value of27bits set: 268435455
value of28bits set: 536870911
value of29bits set: 1073741823
value of30bits set: 2147483647
value of31bits set: -1
Ок, отлично! Значение int с битами от 0 до 31-го индекса (от младшего до самого старшего) все установлено, и результат равен -1 - из приведенного выше результата
Позвольте мне попробовать другой способ:
System.out.println(BitVector.countSetBits( -1 ) ) \\ prints '0'
Тогда каково значение всех 32 битов, равных 1 в int?
Добавлена функция countSetBits:
static int countSetBits(int n)
{
int count = 0;
while (n > 0)
{
count += n & 1;
n >>= 1;
}
return count;
}
-1
. - person tkausl   schedule 16.02.2018BitVector
? - person shmosel   schedule 16.02.2018BitVector
, его реализацияcountSetBits
, скорее всего, неверна. - person Lothar   schedule 16.02.2018while (n > 0)
- person shmosel   schedule 16.02.2018while (n > 0)
. Думаю, вы сами видите, почему он возвращает 0 для-1
- person dunni   schedule 16.02.2018BitVector.countSetBits( -1 )
не похоже, что передано неправильное значение. - person Lothar   schedule 16.02.2018while (n > 0)
может не работать, если вы передадите -1? Отредактировал исправления вашего кода в свой ответ. - person Andy Turner   schedule 16.02.2018