Win a copy of Think Java: How to Think Like a Computer Scientist this week in the Java in General forum!

# java.math.BigInteger

Rubbal Bhusri
Ranch Hand
Posts: 71
Can anyone please tell me what is going on in this code snippet :

BigInteger bi = new BigInteger("1023");

// Parse and format to binary
bi = new BigInteger("1111111111", 2); // 1023
String s = bi.toString(2); // 1111111111

The thing which i didn't get is : the purpose of arguments passed in BigInteger("1111111111", 2) constructor.
I mean what are we doing in this code ???
Is it meant to convert Binary numbers into String format ???
and Do we have to supply a Binary number everytime ???
what-if I want a method that convert a Binary number asked by a User from Command-line to Decimal format ??

Tim McGuire
Ranch Hand
Posts: 820
Rubbal Bhusri wrote:Can anyone please tell me what is going on in this code snippet :

BigInteger bi = new BigInteger("1023");

// Parse and format to binary
bi = new BigInteger("1111111111", 2); // 1023
String s = bi.toString(2); // 1111111111

The thing which i didn't get is : the purpose of arguments passed in BigInteger("1111111111", 2) constructor.
I mean what are we doing in this code ???
Is it meant to convert Binary numbers into String format ???
and Do we have to supply a Binary number everytime ???
what-if I want a method that convert a Binary number asked by a User from Command-line to Decimal format ??

I did not know the whole answer, but a quick trip to the javadocs (http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html) tells me :

public BigInteger(String val,
Translates the String representation of a BigInteger in the specified radix into a BigInteger. The String representation consists of an optional minus sign followed by a sequence of one or more digits in the specified radix. The character-to-digit mapping is provided by Character.digit. The String may not contain any extraneous characters (whitespace, for example).
Parameters:
val - String representation of BigInteger.

and

Returns the String representation of this BigInteger in the given radix.

in this case, radix means the base, so using 2 here means base 2 or binary. so all you are doing is giving a biginteger a String ("111111") along with an integer (2) that tells BigInteger that this string is a number represented as base 2 and then converting it back into binary with the toString(2)

Ivan Jozsef Balazs
Rancher
Posts: 979
5
>The thing which i didn't get is : the purpose of arguments passed in BigInteger("1111111111", 2) constructor.

The ability to read (and if need be, to locate) the API documentation is a valuable asset for a programmer.

fred rosenberger
lowercase baba
Bartender
Posts: 12122
30
How a number is written or displayed is independent of what the value is. "five" is the same as "5" is the same as "V" is the same as "0101"

Now, you have to tell someone what schema you are using. I would have to tell you the above are "english words", "decimal digit", "roman numerals" and "binary string".

BigInteger works the same way. you can pass in values, but you have to tell java whether it is binary, hexidecimal, or something else.

Rubbal Bhusri
Ranch Hand
Posts: 71
fred rosenberger wrote:How a number is written or displayed is independent of what the value is. "five" is the same as "5" is the same as "V" is the same as "0101"

Now, you have to tell someone what schema you are using. I would have to tell you the above are "english words", "decimal digit", "roman numerals" and "binary string".

BigInteger works the same way. you can pass in values, but you have to tell java whether it is binary, hexidecimal, or something else.

Do you mean to say , whatever we pass the values in arguments e.g. ("1111111111", 2) Its just going to convert that argument into String format e.g. String s = bi.toString(2); because when I try to print the value of 's' in System.out.println(s); command, it just printed the value as it is, which was 1111111111.

Seeing this , I thought that this BigInteger(String val, int radix) constructor is useless.
Can you please , show me some working,practical, live example of this method ???

Winston Gutkowski
Bartender
Posts: 10417
63
Rubbal Bhusri wrote:Can you please , show me some working,practical, live example of this method ???

I don't know how practical it is, but instead of your example, suppose you had a binary string like this:
"10101010101010010100101001010010100101010101010010100101011111111001010010111111010001111110100011010"

How would you propose to convert that to a number? It's too big for any other numeric data type except BigDecimal, and it's not a decimal; it's an integer.

Winston

Matthew Brown
Bartender
Posts: 4567
8
Rubbal Bhusri wrote:Seeing this , I thought that this BigInteger(String val, int radix) constructor is useless.
Can you please , show me some working,practical, live example of this method ???

I don't quite understand where you're coming from, but you seem to be surprised that if you create a BigInteger out of a binary string, and then convert it back to a binary string, you get the same answer as you started with. Is that really the problem? What else would you expect?

Rubbal Bhusri
Ranch Hand
Posts: 71
Can you give any e.g. of working-application, where this method has been used ???

Rubbal Bhusri
Ranch Hand
Posts: 71
I got this code working, where I used the method intValue() of class BigInteger to convert the String passed as argument to the BigInteger("0000000011", 2) constructor to an int type. And it worked very well.
import java.math.*;
class Conversion {
public static void main(String[] args){
// Parse and format to binary
BigInteger bi = new BigInteger("0000000011", 2);
String s = bi.toString(2);
int i = bi.intValue();
System.out.println("The converted integer is :" +

i);
System.out.println();
System.out.println(s);

}

}

BUT BUT BUT

I would still like to see an e.g. of working-application where this BigInteger class has been used .......//

fred rosenberger
lowercase baba
Bartender
Posts: 12122
30
Something like this:

outputs this:

The integer is :127

1111111
127
7f

You can put any value you want into the BigInteger. You can do it using any base. Each of these puts the exact same value into the BigInteger

BigInteger bi = new BigInteger("1111111", 2);
BigInteger bi = new BigInteger("127");
BigInteger bi = new BigInteger("7f", 16);

once the value is in there, you can take it out in any format you want - base2, base 10, base 16...whatever.

Winston Gutkowski
Bartender
Posts: 10417
63
Rubbal Bhusri wrote:I got this code working, where I used the method intValue() of class BigInteger to convert the String passed as argument to the BigInteger("0000000011", 2) constructor to an int type. And it worked very well.

And you could have done it just as easily (and faster) with Integer.parseInt("0000000011", 2); and furthermore, it will throw an exception if the string cannot be converted to an int (ie, it is too large).

BigInteger is designed for holding arbitrary integers (ie, an integer value of virtually any size). If you know that the value is supposed to be an int, then use an int (or an Integer).

Winston