Language/Java

[Java] 숫자 (Number)

arajo 2022. 7. 31. 18:29
728x90

정수

자바의 정수를 표현하기 위한 자료형은 int, long이다. (byte, short 등도 있지만 잘 사용하지 않는다.)

int와 long의 차이는 표현할 수 있는 숫자의 범위이다.

자료형 표현 범위
int -2147483648 ~ 2147483647
long -9223372036854775808 ~ 9223372036854775807
// 사용 방법
int age = 10;
long countOfStar = 8764827384923849L;

long 변수에 값을 대입할 때는 대입하는 숫자 값이 int 자료형의 최대값인 2147483647 보다 큰 경우 8764827384923849L과 같이 L 접미사(또는 소문자 l, 소문자 'l'은 숫자 1과 비슷하게 보이므로 추천하지 않는다.)를 붙여 주어야 한다. 만약 큰 숫자에 'L'과 같은 접미사를 누락하면 컴파일 에러가 발생한다.

실수

자바의 실수를 표현하기 위한 자료형은 float, double 이다.

float와 double의 차이 역시 표현할 수 있는 숫자의 범위이다.

자료형 표현 범위
float -3.4 * 10의38승 ~ 3.4 * 10의38승
double -1.7 * 10의308승 ~ 1.7 * 10의308승
// 사용 방법
float pi = 3.14F;
double morePi = 3.14159265358979323846;

자바에서 실수형은 디폴트가 double이므로 위의 예에서 보듯이 float 변수에 값을 대입할 때에는 3.14F 와 같이 F접미사(또는 소문자 f)를 꼭 붙여 주어야 한다. float 자료형에 값을 대입할 때 접미사를 누락하면 컴파일 에러가 발생한다.

또는 과학적 지수 표현식으로 다음과 같이 사용할 수 있다.

double d1 = 123.4;
double d2 = 1.234e2;

d1과 d2의 값은 123.4로 같다. d2의 e2는 10의 제곱(10의2승)을 의미한다. 즉 1.234∗10의2승 이 되어 123.4 가 되는 것이다.

8진수와 16진수

8진수와 16진수는 int 자료형을 사용하여 표시한다.

0(숫자 '0')으로 시작하면 8진수, 0x(숫자 '0' + 알파벳 'x')로 시작하면 16진수가 된다.

int octal = 023;    // 십진수: 19
int hex = 0xC;     // 십진수: 12

숫자연산

자바의 사칙연산은 실생활에서 일반적으로 사용하는 사칙연산과 다를 바가 없다. 자바는 +, -, *, / 기호를 이용하여 두 숫자간 사칙연산을 수행한다.

public class Sample {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;
        System.out.println(a+b);	// 15
        System.out.println(a-b);	// 5
        System.out.println(a*b);	// 50
        System.out.println(a/b);	// 2
    }
}

%는 나머지 값을 반환하는 연산자이다. 7을 3으로 나누면 나머지는 1이 될 것이고 3을 7로 나누면 나머지는 3이 될 것이다.

// 예
public class Sample {
    public static void main(String[] args) {
        System.out.println(7 % 3);  // 1 출력
        System.out.println(3 % 7);  // 3 출력
    }
}

증감연산 (++, --)

자바는 ++, -- 기호를 이용하여 값을 증가하거나 감소시킬 수 있다. 이러한 ++, -- 기호를 증감 연산자라고도 한다.

int i = 0;
int j = 10;
i++;
j--;

System.out.println(i);  // 1 출력
System.out.println(j);  // 9 출력

++는 값을 1만큼 증가시키고 --는 값을 1만큼 감소시킨다.

++, --등의 연산자의 위치에 따라 다르다.

int i = 0;
System.out.println(i++);  // 0 출력
System.out.println(i);  // 1 출력

System.out.println(i++) 의 출력값은 i가 1만큼 증가되어 1 이 출력되어야 할 것 같지만 0 이 출력되었다. 그렇다면 변수 i의 값이 증가되지 않은것일까? 그 다음 문장인 System.out.println(i) 의 출력값을 확인 해 보니 1이 나온다.

그렇다면 i의 값은 증가된 것이다.

이런 결과가 나오는 원인은 변수 ++ 연산자의 위치 때문이다. 즉 i++ 와 같이 ++ 연산자가 변수명 뒤에 붙으면 해당 코드가 실행되는 순간에는 i 값이 변경되지 않는다. 다만 i++ 문장이 실행된 이후에 i값이 증가하게 된다. 이와는 반대로 i++ 대신 ++i라고 사용하게 되면 i 값이 먼저 증가된 후에 해당 코드가 실행된다.

  • i++ : 값이 참조된 후에 증가
  • ++i : 값이 참조되기 전에 증가
int i = 0;
System.out.println(++i);  // 1 출력
System.out.println(i);  // 1 출력

++i에 의해서 i값이 참조되기 전에 증가된것을 확인 할 수 있다.

--연산자도 ++연산자와 동일한 규칙을 따른다.