//  Data Structures with Java by John R. Hubbard
//  Copyright McGraw-Hill, 2001
//  Problem 1.9 on page 21


public class Pr0109
{ public static void main(String[] args)
  { System.out.println("binaryToSigned(\"010100001001\") = "
      + binaryToSigned("010100001001"));
    System.out.println("binaryToSigned(\"101011110111\") = "
      + binaryToSigned("101011110111"));
  }
  
  public static int binaryToSigned(String code)
  { int len = code.length();
    int unsigned = binaryToUnsigned(code);  // Problem 1.10
    if (code.charAt(0) == '0') return unsigned; 
    return  unsigned - (int)Math.pow(2,len);
  }
  
  public static int binaryToUnsigned(String code)
  { int n = code.length();
    int answer = 0;
    for (int i=0; i<n; i++)
      answer = answer*2 + (code.charAt(i)=='1' ? 1 : 0);
    return answer;
  }
}
