Как преобразовать целое число в два числа, которые сначала делаются нечетными битами, а вторые - четными

Как я могу конвертировать 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

Я считаю справа налево биты.

Другие вопросы по тегам