1

Мне нужно скрыть большую двоичную строку (длина = 251) переменной типа Long, чтобы сделать некоторые логические операторы вроде (AND, OR и т. Д.), Но в этой операции появляется ошибка из-за длины строки, как я думаю!конвертировать очень большую двоичную строку в длинную

Как я могу решить эту проблему!?

мой код:

System.out.println("value: " + v2.length()); // printing 251 
          Long decimalValue1 = Long.parseLong(v1, 2); //Error here appear. 
          if(type == "AND") 
          { 
           eq = decimalValue1 & decimalValue2; 
          } 
          else if(type == "OR") 
          { 
           eq = decimalValue1 | decimalValue2; 
          } 

Ошибка: Для ввода строки: "01000000000000000001000000000010000000010100010001000000100000011101101010010000000001101110001001111101001001000111001000001101101011111000000010000000010010111100010101010011111011011101101111111100"

+0

Что такое ошибка? – bpgeck

+0

Для строки ввода .. –

+2

«Длинный» имеет место для 64 бит. Вы не можете поместить такой большой двоичный код в 'long'. Если вы хотите выполнять логические операции с неограниченным количеством бит, подумайте об использовании класса ['BitSet'] (http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html) , – RealSkeptic

ответ

0

Я решить путем внедрения ручного сравнения! он получит 3 параметра, первый двоичный String (VAL1) и второй и тип операции ..

Код:

public String logOperators(String val1,String val2,String type) 
{ 
    String eq=""; 
    if(val1.length() == val2.length()) 
    { 
     if(type.equals("AND")) 
     { 
      for (int i = 0; i < val1.length(); i++) { 
       if(val1.charAt(i) == '1' && val2.charAt(i) == '1') 
       { 
        eq += "1"; 
       } 
       else 
       { 
        eq += "0"; 
       } 
      } 
     } 
     else if(type.equals("OR")) 
     { 
      etc.. 
     } 
    } 
    else 
    { 
     System.out.println("Values not equl to each other !"); 
     return "0"; 
    } 

    return eq; 
} 

просто ..

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

  • Нет связанных вопросов^_^