2015-03-25 2 views
1

Я написал очень простой алгоритм для генерации двоичного представления 32-битного целого числа.Двоичное представление целого числа из 32 битов

Вот мой код:

public class NumberManipulator { 

public static final int HEAVIEST_BIT = 32; 


public static long intPower(int value, int power) { 
    if (0== power) { 
     return 1; 
    } 

    long result = 1; 
    for (int i = 1; i <= power; i++) { 
     result = result * value; 
    } 
    return result; 
} 


public static void main(String[] args) { 

    int n1 = 7; 
    int n2 = 18; 
    int n3 = 65; 
    int n4 = 11; 

    System.out.println(getBinaryRepresentationOf(n1)); 
    System.out.println(getBinaryRepresentationOf(n2)); 
    System.out.println(getBinaryRepresentationOf(n3)); 
    System.out.println(getBinaryRepresentationOf(n4)); 

} 

public static String getBinaryRepresentationOf(int number) { 
    StringBuilder resultBuilder = new StringBuilder(); 

    for (int i = HEAVIEST_BIT-1; i >= 0; i--) { 

     long checker = (number >> i) & 1; // (number & intPower(2,i)); (number >> i) & 1; 
     if (checker == 1) { 
      resultBuilder.append("1"); 
     } else { 
      resultBuilder.append("0"); 
     } 
    } 
    return resultBuilder.toString(); 
} 

Этот код работает отлично. На следующем рисунке показан вызов метода метода main.

Binary representation of 32 bits numbers

Однако я сталкиваюсь с проблемой при меняю long checker = (number >> i) & 1 по (number & intPower(2,i)), он просто дает мне отклоняющиеся результаты, и я действительно не могу понять, почему. Любая помощь по этому поводу очень приветствуется.

ответ

2

Imagine number 2. В двоичном формате это 0010, и вы сравниваете его с intPower(2, 1). Результат 2 & 2 (0010 & 0010), результат 2 еще раз (0010). Если вы потерпите неудачу, потому что он сравнивается с 1. Короче, что вы получаете после &: 0 или rhs значение (не всегда 1/0 как с (number >> i) & 1).

Изменить код:

if (checker != 0) { 
    resultBuilder.append("1"); 
} else { 
    resultBuilder.append("0"); 
} 
+0

отлично, спасибо – alainlompo

Смежные вопросы