Как преобразовать целое число в два числа, которые сначала делаются нечетными битами, а вторые - четными
Как я могу конвертировать int=43707 в два других числа. Первое число состоит из значения нечетных битов. Второе число состоит из значения четных бит.
Извините за мою грамматику.
int x = 43707; // 1010101010111011
var even = 0;
var odd = 0;
for (int i = 0; i<=31; i++) {
if(i%2 == 0) {
?
} else {
?
}
}
3 ответа
Вы ищете побитовую операцию И: &. Вы можете использовать его вместе с двоичной маской (обычно указывается в шестнадцатеричной записи 0x00FF). так что вам нужно сделать что-то вроде:
int x= 707; //10110011
int oddBits = 0x5555; //01010101
int evenBits = 0xAAAA; //10101010
int oddResult = x & oddBits;
System.out.println(oddResult);
int evenResult = x & evenBits;
System.out.println(evenResult);
который возвращает: 65 //00010001 и 642 // 10100010
Просто преобразуйте int в цифры, как показано ниже:
List<Integer> digits = new ArrayList<Integer>();
while(x > 0) {
digits.add(x % 10);
x /= 10;
}
System.out.println(digits);
Как только вы разделите цифры, примените четную нечетную логику. Вот полный код:
int x = 43707; // 1010101010111011
List<Integer> digits = new ArrayList<>();
while(x > 0) {
digits.add(x % 10);
x /= 10;
}
int i = 0;
int length = digits.size();
while (i < length) {
if(digits.get(i)%2 == 0){
System.out.println("Even Number" + digits.get(i));
} else {
System.out.println("Odd Number" + digits.get(i));
}
i++;
}
Если вы ищете Бинарное преобразование, вы можете использовать приведенный ниже код.
int x = 43707; // 1010101010111011
int testNumber;
String binaryNumber = Integer.toBinaryString(x);
for (int i = 0 ; i != binaryNumber.length() ; i++) {
char c = binaryNumber.charAt(i);
testNumber = Character.getNumericValue(binaryNumber.charAt(i));
if(testNumber == 0){
System.out.println("Even Number");
} else {
System.out.println("Odd Number");
}
System.out.println(c);
}
System.out.println(binaryNumber);
Он преобразует Int в двоичное, а затем проверяет четные и нечетные числа.
Надеюсь, это работает для вас согласно желаемому результату.
Я подошел к этому:
int x = 43707;
String binary = Integer.toBinaryString(x);
System.out.println("binary=" + binary);
String odds = "";
String evens = "";
for (int i = binary.length() - 1; i >= 0; i--) {
if ((i + 1) % 2 == 0) {
odds += binary.charAt(i);
} else {
evens += binary.charAt(i);
}
}
System.out.println("odds=" + odds);
System.out.println("evens=" + evens);
int odd = Integer.parseInt(odds, 2);
int even = Integer.parseInt(evens, 2);
System.out.println("number from odd bits=" + odd);
System.out.println("number from even bits=" + even);
печать
binary=1010101010111011
odds=10100000
evens=11111111
number from odd bits=160
number from even bits=255
Я считаю справа налево биты.