Если мой вход равен 1. Затем 1, как 32 бита в двоичном формате, - 00000000000000000000000000000001. Если я инвертирую биты, его 1111111111111111111111111111111110. И если я конвертирую этот инвертированный бит число от двоичного до десятичного, я должен получить 4294967294. Я написал следующую программу для этого, но моя последняя сумма ошибочна, несмотря на то, что я могу правильно инвертировать биты. Я получаю -3.Сумма из 32 бит после инвертирования бит, конечный результат от двоичного до десятичного.
Вот мой код:
public class FlippingBits {
public static void main(String[] args) {
FlippingBits fpb = new FlippingBits();
int i = 1;
int index = 0;
int[] bitArray = new int[32];
fpb.convertToBin(i, bitArray, index);
}
private void convertToBin(int decimalInput, int[] unsigned32, int index) {
if (decimalInput <= 1) {
unsigned32[index++] = flipBit(decimalInput);
for (int i = index; i < unsigned32.length; i++) {
unsigned32[i] = 1;
}
printArray(unsigned32);
System.out.println();
sumBit(unsigned32);
return;
}
int remainder = decimalInput % 2;
unsigned32[index] = flipBit(remainder);
index++;
convertToBin(decimalInput >> 1, unsigned32, index);
}
private void sumBit(int[] unsigned32) {
int sum = 0;
for (int i = 0; i < unsigned32.length; i++) {
sum += unsigned32[i] * (int) Math.pow(2, i);
}
System.out.println(sum);
}
private int flipBit(int remainder) {
if (remainder == 1) {
return 0;
} else {
return 1;
}
}
private void printArray(int[] unsigned32) {
for (int i = 0; i < unsigned32.length; i++) {
System.out.print(unsigned32[i]);
}
}
}
Я не уверен, что происходит с моим заполнив ([] INT) метод. Я уверен, что не забыл, как конвертировать из двоичного в десятичный.
Вы должны прочитать на [двоичное дополнение] (HTTP: // en.wikipedia.org/wiki/Two%27s_complement). – Jared