6일차 java 연산(2022-12-30)

권단비·2022년 12월 30일
0

IT

목록 보기
8/139

[TIP]

- 연산 방법
・CPU는 +연산만 할 수 있다.
・-2의 보수는 8이다.

[ex]
-1의 보수 = 9
-2의 보수 = 8
-3의 보수 = 7
.
.
.
-10의 보수 = 0
-25의 보수 = 75

[Eclipse 연습]

[계산]
//반지름이 11.5인 원의 넓이를 구하는 프로그램을 작성하시오.
//반지름 * 반지름 * 3.14
public class test {
	public static void main(String[] args) {
		final double PIE = 3.14;
		double radius = 11.5;
		double area = radius * radius * PIE;
		System.out.println(area);
	}
}
[결과값]
415.26500000000004

[계산]
public class CharTypeUnicode {
	public static void main(String[] args) {
		char ch1 = '헐';
		char ch2 = '확';
		char ch3 = 54736; // 문자 '헐'의 유니코드 값
		char ch4 = 54869; // 문자 '확'의 유니코드 값
		char ch5 = 0xD5D0;
		char ch6 = 0xD655;
		char ch7 = 'A';
		char ch8 = 65;
		int num = 1;
		char ch = '1';
		System.out.println(num);
		System.out.println(ch);
		System.out.println(ch7);
		System.out.println(ch8);
		System.out.println(ch1 + " " + ch2);
		System.out.println(ch3 + " " + ch4);
		System.out.println(ch5 + " " + ch6);
	}
}
[결과값]
1
1
A
A
헐 확
헐 확
헐 확

[계산]
public class IntegerLiteralas {
	public static void main(String[] args) {
		int num1 = 123;   // 10진수 표현
		int num2 = 0123;  // 8진수 표현(앞에 0이 들어가면 8진수)
		int num3 = 0x123; // 16진수 표현(0x 들어가면 16진수)
		System.out.println("num1: " + num1);
		System.out.println("num2: " + num2);
		System.out.println("num3: " + num3);
		System.out.println("11 + 22 + 33 = " + (11 + 22 + 33));
		System.out.println("011 + 022 + 033 = " + (011 + 022 + 033));
		System.out.println("0x11 + 0x22 + 0x33 = " + (0x11 + 0x22 + 0x33));
	}
}
[결과값]
num1: 123
num2: 83
num3: 291
11 + 22 + 33 = 66
011 + 022 + 033 = 54
0x11 + 0x22 + 0x33 = 102

[리터럴(Literals)]

: 자료형을 기반으로 표현이 되는 상수를 의미한다.

ex) int num1 = 5 + 7;
ex) double num2 = 3.3 + 4.5;

- 정수는 무조건 int형으로 인식하기로 약속되어 있음
따라서 5와 7은 '정수형 리터럴'이다.
그리고 3.3과 4.5는 '실수형 리터럴'이다.

[설명]
5+7을 계산하기 위해 5/7 각각 방을 잡아 해당 데이터를 넣는데,
이때 이 값은 변하지 않기 때문에 리터럴 상수라 표현한다.

  • OS가 메모리에 직접 데이터를 올려준다.

[정수형 리터럴]

정수 리터럴은 어떠한 데이터 타입을 사용해도 무조건 int로 인식하기 때문에, int의 범위(21억)을 넘어서는 수는 변수 선언 끝에 데이터 타입의 앞 글자를 쓴다.

ex) long num = 3147483637L;
[계산]
public class Long {
	public static void main(String[] args) {
		long num = 3147483637L;
		// 정수 리터럴은 무조건 메모리에 int로 값을 올려서 21억을 넘는 숫자의 경우 오류가 발생한다.
		// 끝에 L을 입력하면 long으로 값을 올려서 오류가 없어진다.
		System.out.println(num);
	}
}
[결과값]
3147483637

[실수형 리터럴]

실수는 기본 double형. double형임을 명시하기 위해서는 d 또는 D 삽입 가능
float으로 표시하기 위해서는 f 또는 F 삽입.

ex) system.out.println(3.0004999 + 2.0004999);
    system.out.println(3.0004999D + 2.0004999D);

    system.out.printli(3.0004999F + 2.0004999F);
[계산]
public class Long {
	public static void main(String[] args) {
		float num1 = 0.8f;
		// 실수 리터럴은 기본적으로 메모리에 double로 잡힌다.
		// float으로 표시하고 싶을 땐 끝에 F나 f를 입력하면 오류가 없어진다.
		System.out.println(num1);
	}
}
[결과값]
0.8

[부동소수점]

e : 10으로 인식
부동소수점 : 실수를 표현할 때 소수점의 위치를 고정하지 않는 것을 말한다.

[ex]
3.4e3→ 3.4 * 10³=3400.0
3.4e-3→ 3.4*10-³=0.0034

[자료형 변환의 의미]

int num5 = 50;
long num6 = 3147483647L;
System.out.println(num5 + num6);

▲num5에 저장된 값이 long형으로 형 변환 된다.(자동 형 변환)

★두 피연산자의 자료형이 일치해야 동일한 방법을 적용하여 연산을 진행할 수 있다.
★피연산자의 자료형이 일치하지 않을 때(Type)의 변환을 통해 일치를 시켜야 한다.

int(4byte) > long(8byte)으로 값 출력(〇) : 값 손실 없이 옮길 수 있다.
long(8byte) > int(4byte)로 값 출력(×) : 값 손실
float(4byte) > long(8byte) : 값 출력(×) : 값 손실(소수점 손실)
long(8byte) > float(4byte) : 값 출력(〇) : 소수점까지 표시 가능.
                             but float이 표현할 수 있는 값을 넘을 시, double로 변경.
[ex]
long num1 = 30000000007L;
int num2 = num1
⇒오류 발생

long num1 = 30000000007L;
int num2 = (int)num1
⇒실행 가능하지만, 결과값은 상이

[결과값]
-64771065
[계산]
public class Explicit {
	public static void main(String[] args) {
		long c;
		int a = 10, b = 20;
		c = a + b;
		System.out.println(c);
	}
}
[결과값]
30
[계산]
		int a = 4;
		int b = 3;
		double c = b / a;
		System.out.println(c);
[결과값]
0.0
[설명]
b / a를 먼저 계산해서 c로 들어가기 때문에,'3/4=0.75'지만,
정수형 int를 사용하여 값은 0이 된다.
0의 값이 double로 들어가면 실수인 0.0으로 결과가 나온다.

0개의 댓글