2015-05-22 8 views
0

Большинство, вероятно, знакомы с этой проблемой, но и для тех, кто не являются:Hackkerrank BitFlipping вызов

Учитывая 32-разрядные целые числа без знака переворачивать их биты и распечатать полученные целые числа.

Я надеялся, что кто-то может дать мне ключ, как это решить на Java. Теперь я, как правило, предоставляю некоторый код, который я попробовал, но это был такой беспорядок, что его нужно было удалить. Я попытался взглянуть на редакцию, которая предложила использовать побитовый оператор ~, но это не обеспечило требуемый ввод. Пример ввода/вывода был

Входной сигнал:

3 (this is just the number of the integers that we are given) 
2147483647 
1 
0 

Выход:

2147483648 
4294967294 
4294967295 

P.S Любая помощь будет оценена.

ответ

1

Там в ничего плохого с оператором ~. Он переворачивает бит. Все, что вам нужно понять, это то, что в Java значение int всегда равно Подписано.

Но поскольку «unsigned» - это только вопрос интерпретации бит, вы должны печатать их как неподписанные значения, например.с помощью Java 8:

int[] values={2147483647, 1, 0}; 
for(int value: values) 
    System.out.println(Integer.toUnsignedString(~ value)); 

напечатает

2147483648 
4294967294 
4294967295 

Если вы не можете использовать Java 8, вы можете помочь себе с помощью преобразования int значения long перед печатью:

int[] values={2147483647, 1, 0}; 
for(int value: values) 
    System.out.println((~ value) & 0xFFFFFFFFL); 
+0

Большое спасибо! Кажется, я забыл, что значения int подписаны. –

1

ДЕЙСТВИТЕЛЬНО ЭТО переворачивает все биты

it is normal that if you flip small number like 

    000000000000000001 to inverse bits: 
    111111111111111110 

результат будет гораздо большее число.

int n=~n; // flips all bits to inverse, 1 to 0 and 0 to 1; 

, если вы хотите иметь только 32 бит сделать:

int n=n&0xFFFFFFFF; 

вы можете проверить биты целочисленной таким образом:

int x = 100; 
System.out.println(Integer.toBinaryString(x)); 
0

Простое решение: Вы необходимо перевернуть биты. 1 становится 0. 0 становится 1. Когда это происходит?

1 xor 1 = 0 
1 xor 0 = 1 

Таким образом, любое число исключающее ff должно дать вам ответ.

0

java.math.BigInteger.flipBit (Int N) возвращает BigInteger, значение которого эквивалентно этому BigInteger с назначенным бит переворачивается

// create 2 BigInteger objects 
BigInteger bi1, bi2; 

// assign value to bi1 
bi1 = new BigInteger("8");//1000 

// perform flipbit operation on bi1 with index 1 
bi2 = bi1.flipBit(1);