- 연산 방법
・CPU는 +연산만 할 수 있다.
・-2의 보수는 8이다.
[ex]
-1의 보수 = 9
-2의 보수 = 8
-3의 보수 = 7
.
.
.
-10의 보수 = 0
-25의 보수 = 75
[계산] //반지름이 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
: 자료형을 기반으로 표현이 되는 상수를 의미한다.
ex) int num1 = 5 + 7;
ex) double num2 = 3.3 + 4.5;
- 정수는 무조건 int형으로 인식하기로 약속되어 있음
따라서 5와 7은 '정수형 리터럴'이다.
그리고 3.3과 4.5는 '실수형 리터럴'이다.
[설명]
5+7을 계산하기 위해 5/7 각각 방을 잡아 해당 데이터를 넣는데,
이때 이 값은 변하지 않기 때문에 리터럴 상수라 표현한다.
정수 리터럴은 어떠한 데이터 타입을 사용해도 무조건 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으로 결과가 나온다.