1. 산술 연산자와 증감 연산자
1) 산술 연산자
- 나머지 연산자(%) = 모듈로(modulo)연산 = 나머지를 수행한 이후의 나머지
2) 증감 연산자
- 전위형
- 변수 앞에 붙음
- 다른 모든 명령보다 먼저 실행
- 후위형
-변수 뒤에 붙음
- 가장 나중에 실행
- 전위형, 후위형 증감 연산자가 동일한 결과를 출력할 때
int a =3;
++a; //a 값에 1을 더하라는 명령 1개(전위형, 후위형 차이 없음)
System.out.println(a); //4
int b=3;
b++; // b 값에 1을 더하라는 명령 1개(전위형, 후위형 차이 없음)
System.out.println(b); //4
- 전위형, 후위형 증감 연산자가 서로 다른 결과를 출력할 때
int a1 =3;
int b1=++a1; //a1 값에 1을 더하기 (전위형) -> a1 값을 b1 값에 대입
System.out.println(a1); //4
System.out.println(b1); //4
int a2=3;
int b2=a2++; //a2 값을 b2에 대입 -> a2값에 1을 더하기 (후위형)
System.out.println(a2); //4
System.out.println(b2); //3
-전위형 : 증감 연산을 먼저 실행 후 대입 연산 수행
- 후위형 : 대입연산을 먼저 수행 후 증감 연산 실행
- 산술 연산자와 3가지 증감 연산자
package operator_EX;
public class operator_EX1 {
public static void main(String[] args ) {
//산술 연산자
System.out.println(2+3);
System.out.println(8-5);
System.out.println(7*2);
System.out.println(7/2);
System.out.println(8%5);
System.out.println();
//증감 연산자 case1
int value1=3;
value1++;
System.out.println(value1);
int value2=3;
value2++;
System.out.println(value2);
//증감 연산자 case2
int value3=3;
int value4=value3++;
System.out.println(value3);
System.out.println(value4);
System.out.println();
int value5=3;
int value6=++value5;
System.out.println(value5);
System.out.println(value6);
System.out.println();
//증감 연산자 case3
int value7=3;
int value8=4;
int value9=2+value7-- + ++value8;
System.out.println(value7);
System.out.println(value8);
System.out.println(value9);
}
}
2. 비트 연산자
- 비트 단위의 연산자
- 진리표
값1 | 값2 | AND(&) | OR(|) | XOR(^) |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
값 | NOT(~) |
0 | 1 |
1 | 0 |
- 10진수 -> 2진수 : Integer.toBinaryString()
- 10진수 -> 8진수: Integer.toOctalString()
- 10진수 -> 16진수: Integer.toHexString()
- 다시 10진수로 : Integer.parseInt()
- 비트 NOT 연산 과정
- 값의 첫번째 비트는 부호비트(0:양수, 1:음수)
- 부호가 정해지면 나머지 비트로 값 읽기 (양수는 1을 기준으로, 음수는 0을 기준으로 읽은 후에 1 더하기 )
3. 시프트 연산자
- 비트 위치를 좌우로 이동하는 연산
- 산술시프트(<< >>)/ 논리 시프트(>>>)
1) 산술 시프트
- 숫자의 부호 비트는 유지 하면서 나머지 비트를 왼쪽(<<) 또는 오른쪽(>>)으로 이동시킴
- 왼쪽(<<)
- 1bit 이동할 때 마다 X2의 효과
- 오른 쪽 빈칸생김
- 0으로 채움
- 오른쪽(<<)
-1bit 이동할 때 마다 %2효과
- 왼쪽 빈칸 생김
- 부호비트와 동일한 값으로 채움
2) 논리 시프트
- 부호 비트를 포함해 전체 비트를 오른쪽으로 이동
- 빈칸은 모두 0으로 채움
- 부호 비트까지 이동시키므로 부호 비트가 1인 음수일때 논리 시프트 이후에는 값이 양수로 변함
- 각 비트 위치에서 값만이 의미가 있을때 사용
ex) '3번째 비트는 사운드 on/off 여부를 나타내고, 4번째 비트 위치는 자동완성 on/off를 의미'
- 논리 시프트를 이용해 각 비트 위치에서의 값 알아내기
int flags = 0b10110110;
System.out.println(flags >>> 0 & 1); //0: 0번째 비트값
System.out.println(flags >>> 1 & 1); //1: 1번째 비트값
System.out.println(flags >>> 2 & 1); //1: 2번째 비트값
System.out.println(flags >>> 3 & 1); //0: 3번째 비트값
System.out.println(flags >>> 4 & 1); //1: 4번째 비트값
System.out.println(flags >>> 5 & 1); //1: 5번째 비트값
System.out.println(flags >>> 6 & 1); //0: 6번째 비트값
System.out.println(flags >>> 7 & 1); //1: 7번째 비트값
4. 비교 연산자
- 크기 비교(>,<,>=,<=) 와 등가 비교(==,!=)
- 등가 비교 비교 대상 = 스택(Stack)메모리의 값을 비교
- 기본 자료형의 실제 데이터 값은 스택 메모리에 저장
- 참조 자료형의 실제 데이터 값은 힙 메모리에 저장되고 스택 메모리에는 실제 데이터 값의 위칫값 저장
- 기본 자료형 등가 비교 대상 = 실제 데이터 값
- 참조 자료형 등가 비교 대상 = 실제 데이터 값이 위치한 번짓값
- 크기 비교 및 등가 비교와 참조 자료형의 등가 비교
package operator_EX;
public class operator_EX2 {
public static void main(String[] args) {
//크기 비교
System.out.println(5<2);
System.out.println(5>2);
System.out.println(5<5);
System.out.println(5<=5);
System.out.println(5>=5);
System.out.println();
//등가 비교
//기본 자료형 등가 비교
int a =5;
int b =2;
int c= 5;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a==c);
System.out.println(a!=c);
System.out.println();
//참조 자료형 등가 비교
String str1 = new String("안녕");
String str2 = new String("안녕");
System.out.println(str1==str2);
}
}
5. 논리 연산자
- 비트 연산자와 비슷하지만 피연산자로 불리언값(true, false)만 올수 있고 연산 결과 또한 불리언값만 올수 있음
- 진리표
값1 | 값2 | AND(&&) | OR(||) | XOR(^) |
false | false | false | false | false |
false | true | false | true | true |
true | false | false | true | true |
true | true | true | true | false |
값 | NOT(~) |
false | true |
true | false |
- 논리 연산은 비트 연산자로도 수행할 수 있음
- 차이점은 쇼트 서킷의 적용여부(논리연산은 적용 /비트 연산은 비적용)
- 쇼트 서킷(short circuit)
- 연산을 수행하는 과정에서 결과가 이미 확정됐을 때 나머지 연산과정을 생략하는 것
- 논리 연산자와 비트 연산자를 이용한 논리 연산
package operator_EX;
public class operator_EX3 {
public static void main(String[] args) {
//논리 연산자
// AND(&&)
System.out.println(true && true);
System.out.println(true && false);
System.out.println(true && (5<3));
System.out.println((5<=5) && (7>2));
System.out.println();
//OR(||)
System.out.println(true || true);
System.out.println(true || false);
System.out.println(true || (5<3));
System.out.println((5<=5) && (7>2));
System.out.println();
//XOR(^)
System.out.println(true ^ true);
System.out.println(true ^ false);
System.out.println(true ^ (5<3));
System.out.println((5<=5) ^ (7>2));
System.out.println();
//NOT(!)
System.out.println(!true);
System.out.println(!false);
System.out.println(false || !(5<3));
System.out.println((5<=5) || !(7>2));
System.out.println();
//비트 연산자로 논리 연산 수행
System.out.println(true & true);
System.out.println(true & false);
System.out.println(true | (5<3));
System.out.println((5<=5) | (7>2));
System.out.println();
//쇼트 서킷 사용 (논리 연산자는 사용, 비트 연산자는 사용 X)
int value1 = 3;
System.out.println(false && ++value1>6); //증감연산 수행 x
System.out.println(value1);
int value2 = 3;
System.out.println(false & ++value2>6); //증감연산 수행
System.out.println(value2);
int value3 = 3;
System.out.println(true || ++value3>6); //증감연산 수행 x
System.out.println(value3);
int value4 = 3;
System.out.println(true| ++value4>6); //증감연산 수행
System.out.println(value4);
}
}
6. 대입 연산자
- 오른쪽 피연산자의 연산 결과를 왼쪽 변수에 대입하는 연산자
- a=a+3
-a값에 3을 더한 후 그 결과를 다시 a에 대입
7. 삼항 연산자
- 유일하게 3개의 피연산자가 있는 연산자
- (참 또는 거짓) ? 참일 때 연산결과 : 거짓일 때 연산결과
- 삼항 연산자의 간단한 예
int a =(true)?1:2;
System.out.println(a); //1
int b = (a % 2 ==0)? 10 :20;
System.out.println(b); //20
- 삼항 연산자
package operator_EX;
public class operator_EX4 {
public static void main(String[] args) {
//삼항 연산자
int value1 = (3>5) ? 6:9;
System.out.println(value1);
int value2 = (5>3) ? 10 : 20;
System.out.println(value2);
int value3 = 3;
System.out.println((value3 % 2 == 0)? "짝수":"홀수");
//if-else 구문으로 변환
if(value3 %2 == 0) {
System.out.println("짝수");
}
else {
System.out.println("홀수");
}
}
}
'Java' 카테고리의 다른 글
4-1장 제어문 (2) 반복문 (0) | 2023.04.21 |
---|---|
4-1장 제어문 (1) 조건문 (0) | 2023.04.21 |
3-1장 연산자의 종류 (0) | 2023.04.19 |
2-4장 기본 자료형 간의 타입 변환 (0) | 2023.04.19 |
2-3장 자료형의 종류 (0) | 2023.04.16 |