본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

java.math.BigInteger long보다 큰 정수값을 계산할때

정수는 값의 한계가 있다.

과학적 계산에서 더 큰값을 다뤄야할때 사용하는것이 BigInteger, 다만 성능은 long타입보다 떨어질 수 밖에 없다.

https://standout.tistory.com/22

 

숫자의 종류, 실수 무리수 유리수 정수 자연수

간단히 예시로 정리하자. 실수 floating point number 3.14 무리수 irrational number 𝝅 유리수 rational number ⅛ 정수 integer ... -2, -1, 0, 1, 2 … 자연수 natural number 1, 2, 3, 4, 5, 6 … 실수, floating point 3141592란 수에

standout.tistory.com

https://standout.tistory.com/56

 

자바 기본타입 (bsilfdcb)

외워보자. bsil fd cb 비실한 fd가 시비를 건다. 자바에서 값을 표현할때 데이터 타입으로 정수, 실수, 논리형을 가진다. 위 표를 봐보자, 최소단위 byte는 1byte로 8bit를 가지고 있고, 256자리를 표현, -1

standout.tistory.com

 

 

 

BigInteger는 다양한 방법을 사용하여 객체를 생성 할 수 있고

이는 주어진 상황과 사례에 따라 다르겠다.

//문자열에서 생성
String numberStr = "123456789012345678901234567890";
BigInteger bigInteger1 = new BigInteger(numberStr);
//정수에서 생성
long longValue = 1234567890123456789L;
BigInteger bigInteger3 = BigInteger.valueOf(longValue);
//BigInteger에서 생성
BigInteger originalBigInteger = new BigInteger("987654321");
BigInteger newBigInteger = new BigInteger(originalBigInteger.toByteArray());
//배열에서 생성
byte[] byteArray = {1, 2, 3, 4, 5};
BigInteger bigInteger4 = new BigInteger(byteArray);

 

 

 

BigInteger는 계산을 도와주는 메서드들이 정의되어있다.

 

 

BigInteger add( BigInteger  val)

BigInteger subtract( BigInteger  val)

BigInteger multiply( BigInteger  val)

BigInteger divide( BigInteger  val)

BigInteger remainder( BigInteger  val)

import java.math.BigInteger;

public class BigIntegerExample {
    public static void main(String[] args) {
        // 생성된 BigInteger 객체들
        BigInteger num1 = new BigInteger("123456789012345678901234567890");
        BigInteger num2 = new BigInteger("987654321098765432109876543210");

        // add() 메서드: 두 BigInteger 값을 더함
        BigInteger sum = num1.add(num2);
        System.out.println("Sum: " + sum);
        //Sum: 1111111110111111110011111111000

        // subtract() 메서드: 두 BigInteger 값을 뺌
        BigInteger difference = num1.subtract(num2);
        System.out.println("Difference: " + difference);
        //Difference: -864197531086419753208641975320

        // multiply() 메서드: 두 BigInteger 값을 곱함
        BigInteger product = num1.multiply(num2);
        System.out.println("Product: " + product);
        //Product: 121932631112635269386129693570347534143581119683078270472199487193686200

        // divide() 메서드: 두 BigInteger 값을 나눔
        BigInteger quotient = num1.divide(num2);
        System.out.println("Quotient: " + quotient);
        //Quotient: 124

        // remainder() 메서드: 두 BigInteger 값을 나눈 나머지를 계산
        BigInteger remainder = num1.remainder(num2);
        System.out.println("Remainder: " + remainder);
        //Remainder: 123456789012345678901234567890
    }
}

 

 

 

큰 숫자를 다루기 위한 클래스로 성능을 향상시키기위해 비트단위 메서드도 많이 가지고있다.

and, or, xor, not등은 물론이거니와 아래와같은 메서드도 제공한다.

 

int bitCount()

int bitLength()

boolean testbIt(int n)

BigInteger setBit (int n)

BigInteger clearBit(int n)

BigInteger flipBit(int n)

import java.math.BigInteger;

public class BigIntegerBitManipulationExample {
    public static void main(String[] args) {
        // 생성된 BigInteger 객체
        BigInteger bigInteger = new BigInteger("123456789012345678901234567890");

        // bitCount() 메서드: 2진수로 표현시, BigInteger의 비트 중 1의 개수를 반환
        int countOfOnes = bigInteger.bitCount();
        System.out.println("Count of Ones: " + countOfOnes);
        //Count of Ones: 42

        // bitLength() 메서드: 2진수로 표현시, BigInteger의 비트 길이를 반환
        int bitLength = bigInteger.bitLength();
        System.out.println("Bit Length: " + bitLength);
        //Bit Length: 88

        // testBit(int n) 메서드: 2진수로 표현시, 지정된 위치 n의 비트가 1인지 여부를 반환
        boolean bitAtPosition5 = bigInteger.testBit(5);
        System.out.println("Bit at Position 5: " + bitAtPosition5);
        //Bit at Position 5: true

        // setBit(int n) 메서드: 지정된 위치 n의 비트를 1로 설정
        BigInteger setBitResult = bigInteger.setBit(3);
        System.out.println("After Setting Bit at Position 3: " + setBitResult);
        //After Setting Bit at Position 3: 123456789012345678901234567898


        // clearBit(int n) 메서드: 지정된 위치 n의 비트를 0으로 설정
        BigInteger clearBitResult = bigInteger.clearBit(2);
        System.out.println("After Clearing Bit at Position 2: " + clearBitResult);
        //After Clearing Bit at Position 2: 123456789012345678901234567886

        // flipBit(int n) 메서드: 지정된 위치 n의 비트를 뒤집음 (1을 0으로, 0을 1로)
        BigInteger flipBitResult = bigInteger.flipBit(4);
        System.out.println("After Flipping Bit at Position 4: " + flipBitResult);
        //After Flipping Bit at Position 4: 123456789012345678901234567958
    }
}