Как преобразовать число int в два числа, которые сначала делаются нечетными битами, а 2-е - четными - PullRequest
0 голосов
/ 23 октября 2018

Как я могу преобразовать 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 ]

0 голосов
/ 23 октября 2018

Я пришел к этому:

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

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

0 голосов
/ 23 октября 2018

Вы ищете побитовую операцию AND : &.Вы можете использовать его вместе с двоичной маской (обычно указывается в шестнадцатеричной записи 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

0 голосов
/ 23 октября 2018

Просто преобразуйте 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 в двоичное, а затем проверяет четность инечетные числа.

Надеюсь, это работает для вас согласно желаемому результату.

...