갈림길 이정표

[3. 연산자] 본문

Programming Language/Java 마스터하기(feat. 이것이 자바다)

[3. 연산자]

이몽뇽 2020. 7. 19. 21:31

3.1 연산자와 연산식

3.2 연산의 방향과 우선순위

3.3 단항 연산자

3.4 이항 연산자

3.5 삼항 연산자

package pack1;

public class Test2 {
	public static void main(String[] args) {
		//산술연산자
		int a = 5; //치환 연산자
		int b = 3;
		int c = a + b;
		
		System.out.println(a + b);
		System.out.println(a - b);
		System.out.println(a * b);
		System.out.println(a / b); //몫
		System.out.println(a % b); // 나머지
		System.out.println(a / (double)b); //몫 + 소수점
//		System.out.println(a / 0); // err (/ by zero)
		System.out.println(a / 0.0); // err (infinity)
		System.out.println(a  % 0.0); // err (NaN) Not a Number
		System.out.println(0 / 0.0); // err (NaN)
		System.out.println();
		System.out.println(3 + 4 * 5);
		int mbc = 3 + 4 * 5;
		System.out.println((3 + 4) * 5); //연산자 우선순위 (괄호 > (*,/) > (+,=) > (=치환))
		
		System.out.println();
		String ss1 = "대한";
		String ss2 = "민국";
		String ss3 = ss1 + ss2; // 문자열 합치기 
		System.out.println(ss3);
		System.out.println(ss3 + " " + 2020);
		System.out.println(ss3 + " " + (2000 + 20));
		System.out.println(ss3 + " " + 2000 + 20); // 문자열이 더 큰 개념이니까
		String ss4 = "5" + 6; // 56이 아니라 5,6이 찍힘, 자동적으로 문자열 변환
		System.out.println(ss4);
		int ia = Integer.parseInt("5") + 6; // 강제적으로 문자열을 정수화 (참고 parsedouble)
		System.out.println(ia);  // 참고로 parse 는 '문법적으로 분석하다'
		String ss5 = Integer.toString(5) + 6; // 정수를 문자열로... (근데 python 에서 이해하는 방식은 다르니 참고!)
		System.out.println(ss5);
		
		//누적
		int no = 1;
		no = no + 1;
		no += 1; // 윗 줄과 똑같은 결과이지만 연산속도가 더 빠르다
		no++; // 후위 연산자 (단, 1씩만 늘어남) ... ++,-- 증감 연산자
		++no; // 전위 연산자 (단, 1씩만 늘어남)
		System.out.println("no : " + Integer.toString(no)); // 사실 "no : " + no 해도 됨
		
		System.out.println();
		//증감 연산자
		int imsi = 5;
		int result = ++imsi +1; // 치환 전 늘어남 (다른 연산 수행전 증가시킴)
		System.out.println(imsi);
		System.out.println(result);
		
		int imsi2 = 5;
		int result2 = imsi2++ +1; // 치환이 끝나고 늘어남 (다른 연산 수행 후 증가시킴, result 연산 포함)
		System.out.println(imsi2);
		System.out.println(result2);
		// 이렇게 다른 연산자와 쓰면 헷갈리므로 증감연산자는 단일로 쓴다
		
		//부호에 대해
		System.out.println();
		int imsi3 = 3;
		System.out.println(imsi3);
		System.out.println(-imsi3);
		System.out.println(imsi3 * -1);


	}
}
package pack1;

public class Test3 {
	public static void main(String[] args) {
			//관계, 논리, 기타 연산자
		int a = 5;
		
		System.out.println(a > 3);
		System.out.println(a <= 3);
		System.out.println(a == 3); //같다
		System.out.println(a != 3); //같지 않다
		
		System.out.println();
		int b =10;
		System.out.println(a > 3 && b <= 10);
		System.out.println(a > 3 && b == 10);
		System.out.println(a > 20 && b <= 5); //&&: 앞에 것이 거짓이면 뒤에꺼는 쳐다도 안봄
		System.out.println(a > 20 & b <= 5); // &: 앞에 것이 거짓이라도 뒤에꺼 쳐다봄
		System.out.println(a > 6 || b < 10);
		System.out.println(a > 6 || b < 20); // ||: 앞에거 참이면 뒤에꺼 안봄
		System.out.println(a > 6 | b < 20); // |: 앞에거 참일지라도 뒤에꺼 안봄
		System.out.println(a > 6 | b < 20 + 4 * 2);
		// 연산자 우선순위: () > 산술 연산자 (*,/,% > +,-) > 관계 > 논리 > 치환 [assign]
		// Java는 항상 왼쪽에서 오른 쪽으로 인식
		
		System.out.println();
		//shift 연산자 -> 게임 사운드 (but 자주 안쓰임)
		int ii = 8, ij;
//		System.out.println(ii + " " + ij); // 지역변수는 초기화 필수
		System.out.println("ii:" + ii + " " + Integer.toBinaryString(ii));
		ij = ii << 1; // shift 연산자 왼쪽으로 1 bit 밀어버려. 남는 것은 가장 우측 0으로 채움
		System.out.println("ij:" + ij + " " + Integer.toBinaryString(ij));
		ij = ii >> 2; // shift 연산자 오른쪽으로 2 bit 밀어버려. 남는 것은 가장 좌측 부호와 같은 값으로 채움
		System.out.println("ij:" + ij + " " + Integer.toBinaryString(ij));
		ij = ii >>> 2; // shift 연산자 오른쪽으로 2 bit 밀어버려. 남는 것은 가장 좌측 0으로 채움
		System.out.println("ij:" + ij + " " + Integer.toBinaryString(ij));
		// 자바는 시스템 제어 불가하므로 게임 만들기는 C 가 적합
		// 자바 주요 라이브러리는 C로 이루어짐 (C가 assembly에 가장 가까운 기계어)
		// 오히려 C 언어가 블루오션 (?) 자바 는 레드, python은 신흥
		
		System.out.println();
		//사
		int result = (ii <=5)?100:100 + 50; //?: 참이면 좌측, 거짓이면 우측 값 출력
		System.out.println("result : " + result);
		//method = function = macro = ....
		
		System.out.println();
		int x, y, z;
		x = y = z = 5;
		System.out.println(x + " " + y + " " + z);
		
		System.out.println("---");
		aa();
		System.out.println("-----");
		bb(12);
		System.out.println(bb(12));
		int mbc = bb(11); // 단, return 데이터 타입 일치 해야함 (여기서는 int)
		System.out.println("mbc : " + mbc);
		
		System.out.println("프로그램 종료");
	
	}

public static void aa() {
	System.out.println("aa 메소드(단위 프로그램:unit) 수행");
	}

public static int bb(int arg) {
	System.out.println("bb 메소드(단위 프로그램:unit) 수행");
	int imsi = arg + 100;
	return imsi;
	}
}

//public static void main(String[] args) { -> 이렇게 써야 응용프로그램 실행
//단위 프로그램을 만들어 유지 보수 비용을 적게 만듬 (효율적 프로글매)
//(): 들어올 때 조건 & return: void, int 나갈때 조건 (반환값은 기본 하나지만 있어도 없어도 상관 무)

// 변수에 값 지정하는 방법
// 1. 직접 값 지정 (치환 assign)
// 2. 인수 전달 (argument 또는 parameter) -> 보통 메소드 안에 있음

// && 와 & 차이 그리고 || 와 | 차이 꼭 알자!
Comments