1. 연산자
: 기능이 있는 특수문자.
2. 연산자의 우선순위 (최 단 산 쉬 관 리 삼 대)
3. 결합성
: 같은 우선순위의 연산자들이 하나의 수식에 나열되어 있을 때 결합되어 연산되는 성질
예) 좌에서 우로
4. 비트연산
1) 논리연산자
& 논리곱(AND) : 두 비트 모두 1일 때 1
| 논리합(OR) : 둘 중 하나라도 1일 때 1
^배타논리합(XOR) : 두 비트가 서로 다르면 1
2) 단항연산자
~논리부정(NOT) : 0은 1로, 1은 0으로 변경
~a = -a - 1
3) 부호비트
: 모든 비트의 최상위 비트는 부호비트이며 0은 양수, 1은 음수이다.
4) 쉬프트연산자
<<(좌쉬프트, LEFT SHIFT)
>>(우쉬프트, RIGHT SHIFT)
a << b : a를 좌로 b만큼 비트이동
a >> b : a를 우로 b만큼 비트이동
** 비트 이동시 빈 자리는 양수는 0(음수는 1)으로 채워지고 비트가 넘어가면 자동으로 잘린다 **
** 좌쉬프트 이동시 값은 커질수도 있다(즉, 작아질 수도 있다) / 그러나 우쉬프트의 값은 무조건 작아진다 **
6) 2의 보수
문제) 1 1110 0110
① 우에서 좌로 읽는다.
② 1을 찾는다
③ 그 다음 비트부터 비트를 뒤집는다(NOT연산)
예) 0 0001 1010
④ 10진수로 바꿔준다
예) 26
⑤ -를 붙인다.
예) -26
** 실수가 비트로 변환 될 때 무한루프를 만나게 되면
실수의 오류가 발생하여 원래 값보다 크거나 작은 값이 나올 수 있다 **
5. 조건식
: 결과가 참 또는 거짓 중 결과가 하나가 나오는 식
1) 관계연산자
== : 같다
!= : 같지 않다
>, < : 초과, 미만
>=, <= : 이상, 이하
2) 논리연산자
&& AND(A&&B) : A조건식과 B조건식 모두 참일 때 참
|| OR(A||B) : 둘 중 하나라도 참이면 참
** 컴퓨터에서 거짓은 0, 참은 그 외 모든 수로 표현한다 **
** 그 대신 참은 1로 약속한다 **
** 자바에서는 거짓을 false라는 값으로, 참을 true라는 값으로 사용한다 **
자료형 | type | byte | 값 |
논리형 | boolean | 1 | true, false |
** boolean형이 1byte인 이유? 정보의 최소 단위는 1byte이기 때문 **
3) 단항연산자
! NOT(!A) : A라는 조건식의 결과가 참이면 거짓으로 거짓이면 참으로 변경
4) 삼항연산자(?:)
조건식 ? 참 : 거짓
** 조건식이 참이면 통째로를 참에 있는 값으로, 거짓이면 거짓에 있는 값으로 볼 줄 알아야 한다 **
** 삼항연산자의 참과 거짓값은 문장 불가하며 오로지 값만 사용할 수 있다 **
6. 오늘 실습코드
1) BitTest
package day06;
public class BitTest {
public static void main(String[] args) {
//논리연산자
System.out.println(10&11); //논리곱, 출력값 10
System.out.println(10|11); //논리합, 출력값 11
System.out.println(10^11); //배타적논리합, 출력값 1
//단항연산자
System.out.println(~10); //출력값 -11
}
}
2) OperTest
package day06;
public class OperTest {
public static void main(String[] args) {
boolean isTrue = 10 == 1;
System.out.println(10 == 11);
System.out.println(10 == 11 && 10 > 1);
System.out.println(10 == 11 || 10 > 1);
System.out.println(!(10==11)); //에러! System.out.println(!10 == 11); 왜? 우선순의에 의해 !가 먼저 연산됨 -> 참과 거짓인 상태에서 ==을 연산하기 때문
System.out.println(isTrue);
}
}
3) OperTest2
package day06;
import java.util.Scanner;
import javax.security.sasl.SaslClient;
public class OperTest2 {
public static void main(String[] args) {
//두 정수 입력받기
//대소비교
//두 정수가 같은 경우 올바르게 출력될 수 있도록 수정
int num1 = 0, num2 = 0, result = 0;
String msg = "";
Scanner sc = new Scanner(System.in);
System.out.println("-9999는 비교할 수 없는 정수입니다.");
System.out.print("첫번째 정수 : ");
num1 = sc.nextInt();
System.out.print("두번째 정수 : ");
num2 = sc.nextInt();
result = num1 > num2 ? num1 : num1 == num2 ? -9999 : num2;
msg = result == -9999 ? "두 정수는 같습니다." : "더 큰 값 : " + result;
System.out.println(msg);
/*
//이 소스코드는 두 정수가 같은 경우 올바른 출력값이 불가능
int num1 = 0, num2 = 0, result = 0;
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 정수 : ");
num1 = sc.nextInt();
System.out.println("두번째 정수 : ");
num2 = sc.nextInt();
result = num1 > num2 ? num1 : num2;
System.out.println("더 큰 값 : " + result);
*/
}
}
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_JAVA] 2020.01.21 (0) | 2020.01.22 |
---|---|
[단과_Python] 2020.01.20 (0) | 2020.01.20 |
[단과_Python] 2020.01.17 (0) | 2020.01.19 |
[단과_JAVA] 2020.01.17 (0) | 2020.01.19 |
[단과_Python] 2020.01.16 (0) | 2020.01.17 |