웹_프론트_백엔드/단과

[단과_JAVA] 2020.01.20

shine94 2020. 1. 20. 23:44

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