1. Math
Math
: 수학과 관련된 메서드를 가지고 있는 클래스
- round()
: 실수를 소수점 첫째자리에서 반올림하여 정수 반환 - ceil()
: 올림값을 double형으로 변환 - floor()
: 내림값을 double형으로 변환 - abs()
: int, double 기본형 모두 사용 가능하며 절대값을 얻음
public class Operator5_1 {
public static void main(String[] args) {
long result = Math.round(3.645678);
System.out.println("result = " + result);
// 소수점 4째 자리에서 반올림한 값을 구하기
double pi = 3.141592;
// pi * 1000 = 3141.592
// Math.round(3141.592) = 3142
// 3142 / 1000.0 = 3.142
double shortPi = Math.round(pi * 1000) / 1000.0;
System.out.println(shortPi); // 3.142
// 3.141 구하기
double pi2 = 3.141592;
// pi2 * 1000 = 3141.592
// (int)3141.592
System.out.println("(int)(pi2 * 1000) = " + (int)(pi2 * 1000)); //3141
System.out.println("(int)(pi2 * 1000) / 1000.0 = " + (int)(pi2 * 1000) / 1000.0); // 3.141
}
}
public class Operator5_2 {
public static void main(String[] args) {
double num = 3.14;
System.out.println("반올림 : " + Math.round(num)); // 반올림 : 3
System.out.println("올림 : " + Math.ceil(num)); // 올림 : 4.0
System.out.println("내림 : " + Math.floor(num)); // 내림 : 3.0
System.out.println("절대값 : " + Math.abs(num)); // 절대값 : 3.14
}
}
2. 나머지 연산자 (%)
- 나누고 나눈 나머지를 리턴
- 나누는 피연산자는 0이 아닌 정수만 허용
- 부호 무시
public class Operator5_3 {
public static void main(String[] args) {
int x = 10;
int y = 8;
System.out.print("x를 y로 나눈 몫 = ");
System.out.println(x / y); // x를 y로 나눈 몫 = 1
System.out.print("x를 y로 나눈 나머지 = ");
System.out.println(x % y); // x를 y로 나눈 나머지 = 2
// 부호 무시 확인
int n = 3;
int z = -3;
System.out.println("x % n = " + x % n); // x % n = 1
System.out.println("x % z = " + x % z); // x % z = 1
}
}
3. 비교 연산자
- 두 피연산자를 비교해 true or false로 반환
비교 연산자 | 설명 |
== | 왼쪽과 오른쪽의 피연산자가 같으면 참 반환 |
!= | 왼쪽과 오른쪽의 피연산자가 다르면 참 반환 |
> | 왼쪽의 피연산자가 오른쪽 피연산자보다 크면 참 반환 |
>= | 왼쪽의 피연산자가 오른쪽 피연산자보다 크거나 같으면 참 반환 |
< | 왼쪽의 피연산자가 오른쪽 피연산자보다 작으면 참 반환 |
<= | 왼쪽의 피연산자가 오른쪽 피연산자보다 작거나 같으면 참 반환 |
public class Operator6_1 {
public static void main(String[] args) {
int n1 = 10, n2 = 6;
char c1 = 'A', c2 = 'B';
System.out.println("n1 >= n2 = "); // true
System.out.println(n1 >= n2);
System.out.println("n1 <= n2 = "); // false
System.out.println(n1 <= n2);
System.out.println("n1 == n2 = "); // false
System.out.println(n1 == n2);
System.out.println("n1 != n2 = "); // true
System.out.println(n1 != n2);
// 산술변환 규칙에 의해 char 타입이 int 타입으로 변환되어 연산됨.
System.out.println("c1 < c2 = "); // true
System.out.println(c1 < c2); // 65 < 66
System.out.println("c1 > c2 = "); // false
System.out.println(c1 > c2); // 65 > 66
}
}
4. 문자열 비교
문자열을 비교할 때는 equals()를 사용
- equals
: 비교하고자 하는 두 피연산자의 값 자체를 비교 - ==
: 비교하고자 하는 두 피연산자의 주소값을 비교
public class Operator6_2 {
public static void main(String[] args) {
String s1 = "사랑";
String s2 = "사랑";
System.out.print("s1 == s2 = "); // true
System.out.println(s1 == s2);
System.out.println("s1.equals(s2) = " + s1.equals(s2)); // true
// but,
String s3 = new String("사랑");
System.out.print("s1 == s3 = "); // false
System.out.println(s1 == s3);
System.out.println("s1.equals(s3) = " + s1.equals(s3)); // true
}
}
5. 논리 연산자
논리 연산자 | 설명 |
&& | 논리식이 모두 참이면 참을 반환 (논리 AND 연산) |
|| | 논리식이 하나라도 참이면 참을 반환 (논리 OR 연산) |
! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환 (논리 NOT 연산) |
public class Operator7_1 {
public static void main(String[] args) {
boolean result1, result2, result3, result4, result5, result6;
char ch1 = 'a', ch2 = 'B'; // 'a': 97, 'A': 65, 'B': 66, 'C': 67
result1 = ch1 > 'A' & ch2 < 'C';
result2 = ch1 == 'A' & ch2 < 'C';
result3 = ch1 > 'A' || ch2 < 'C';
result4 = ch1 < 'A' || ch2 < 'C';
System.out.println("&& 연산자에 의한 결과 result1 = " + result1); // true
System.out.println("&& 연산자에 의한 결과 result2 = " + result2); // false
System.out.println("|| 연산자에 의한 결과 result3 = " + result3); // true
System.out.println("|| 연산자에 의한 결과 result4 = " + result4); // false
System.out.println("! 연산자에 의한 결과 result4 = " + !result4); // true
System.out.println();
int num = 10;
// num은 2의 배수 그리고 3의 배수이다.
result5 = num % 2 == 0 && num % 3 == 0;
System.out.println("num은 2의 배수 그리고 3의 배수 = " + result5); // false
// num은 2의 배수 또는 3의 배수이다.
result6 = num % 2 == 0 || num % 3 == 0;
System.out.println("num은 2의 배수 또는 3의 배수 = " + result6); // true
}
}
6. 비트 연산자
비트 연산자 | 설명 |
& | 대응되는 비트가 모두 1이면 1 반환 (비트 AND 연산) |
| | 대응되는 비트 중 하나라도 1이면 1반환 (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1 반환 (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전 (비트 NOT 연산, 1의 보수) |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동 (left shift 연산) |
>> | 명시된 수만큼 비트들을 전부 오른쪽으로 이동 (right shift 연산) |
>>> | 지정한 수만큼 비트를 전부 오른쪽으로 이동시키고 새로운 비트는 전부 0 |
- 비트 연산자는 값을 비트 단위로 연산하기 때문에
0과 1로 표현이 가능한 정수형이나 형변환이 가능한 자료형만 연산 가능
public class Operator7_2 {
public static void main(String[] args) {
// 비트연산자 : 값을 비트 단위로 연산
// 0과 1로 표현이 가능한 정수형이나 형변환이 가능한 자료형만 연산이 가능
int num1 = 8, num2 = -8;
System.out.println("8의 2진수 = " + Integer.toBinaryString(num1)); // 0 생략 가능!
System.out.println("-8의 2진수 = " + Integer.toBinaryString(num2));
System.out.println("-9의 2진수 = " + Integer.toBinaryString(-9)); // 32bit, int = 4byte
// 00000000000000000000000000001000 , 8
// 11111111111111111111111111111000 , -8
System.out.println("& 연산자에 의한 결과 = " + (num1 & num2)); // 00000000000000000000000000001000, 8
System.out.println("| 연산자에 의한 결과 = " + (num1 | num2)); // 11111111111111111111111111111000, -8
System.out.println("^ 연산자에 의한 결과 = " + (num1 ^ num2)); // 11111111111111111111111111110000, -16
System.out.println("~ 연산자에 의한 결과 = " + ~num1); // 11111111111111111111111111110111, -9
System.out.println("<< 연산자에 의한 결과 = " + (num1 << 2)); // 32
System.out.println(">> 연산자에 의한 결과 = " + (num2 >> 2)); // -2
System.out.println(">>> 연산자에 의한 결과 = " + (num2 >>> 2)); // 1073741822
// 진수의 음수를 표현하는 방식 -> 부호 절대값, 1의 보수, 2의 보수
// 부호 절대값 : 가장 왼쪽에 있는 비트를 부호비트라고 했을 때 이것이 0인지 1인지에 따라 양수, 음수로 구분
// 1의 보수 : 11111111 - x를 하는 방식. x를 반전시킨 것과 같음
// 2의 보수 : 100000000 - x를 하는 방식. 가장 왼쪽숫자가 0이면 양수, 1이면 음수를 표현(가장 많이 사용하는 방식)
// ㄴ 쉽게 계산하는 법 : 1의 보수를 구한 뒤에 나온 수 + 1
}
}
7. 2진수의 음수 표현
진수의 음수를 표현하는 방식에는 부호 절대값, 1의 보수, 2의 보수가 있다.
부호 절대값
: 가장 왼쪽에 있는 비트를 부호비트라고 했을 때 이 부호 비트가 0인지 1인지에 따라 양수와 음수로 구분됨
- 가장 왼쪽에 있는 비트(부호비트)가 0일 때는 양수, 1인때는 음수
- 2진수 00000011 = 10진수: 3
- 2진수 10000011 = 10진수: -3
1의 보수
: 11111111 - x 를 하는 방식으로, 11111111 - x는 x를 반전시킨 것과 같음
예를 들어, -13을 1의 보수 방식으로 표현하면
- 13을 2진수로 표현: 00001101
- 11111111 - x 공식에 대입
- 결과: 11110010
2의 보수
: 100000000 - x 를 하는 방식으로, 가장 왼쪽 숫자가 0일 경우 음수, 1일 경우 음수를 표현
- 가장 많이 사용하는 방식
쉽게 계산하는 방법은 1의 보수를 구해서 나온 수에 +1을 해주면 됩니다.
예를 들어, -13을 1의 보수 방식으로 표현하면
- 13을 1의 보수 방식으로 표현: 00001101 →11110010
- 11110010 + 1
- 결과: 11110011
8. 조건 연산자
삼항 연산자
: 조건식 ? 반환값1(참일 때 반환) : 반환값2(거짓일 때 반환)
public class Operator8_1 {
public static void main(String[] args) {
int num1 = 5, num2 = 7;
int result;
result = num1 - num2 > 0 ? num1 : num2;
System.out.println("두 정수 중 더 큰 수는 " + result + "입니다."); // 7
}
}
9. 대입 연산자
public class Operator8_2 {
public static void main(String[] args) {
int num1 = 7, num2 = 7, num3 =7;
num1 = num1 - 3;
num2 -= 3;
num3 =- 3;
System.out.println("- 연산자에 의한 결과 : " + num1); // 4
System.out.println("-= 연산자에 의한 결과 : " + num2); // 4
System.out.println("=- 연산자에 의한 결과 : " + num3); // -3
}
}
'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글
[Java Handbook] Part 3-2 (0) | 2023.09.12 |
---|---|
[Java Handbook] Part 3-1 (0) | 2023.09.12 |
[Java Handbook] Part 2-1 (0) | 2023.09.12 |
[Java Handbook] Part 1-4 (0) | 2023.09.11 |
[Java Handbook] Part 1-3 (0) | 2023.09.11 |