package com.kh.jvavex;
/*
* 자바 연산자
* 모든 프로그래밍에서는 데이터의 연산을 하기 위해 연산자를 이용합니다.
* 지금 배울 연산자는 자바뿐 아니라 모든 언어에서 거의 유사하게 사용되니
* 잘 알면 나중에 편해집니다.
*
* 주의해서 봐야 할 것은 연산자의 기능과 순서 입니다.
* 연산자의 종류는 많기 때문에 모두 외우려고 하기 보다는 자주 사용하면서
* 익숙해지도록 합니다.
*
* 또한 아래에 나열되는 연산자의 종류는 그 순서대로 정의 한것이기 때문에
* 첫자를 순서대로 기억하시면 좀더 편할 것입니다.
*
* 1.최우선 연산자(이하 연산자 생략)
* .(닷 또는 점..클래스 또는 객체 소유의 변수,메서드 등을 호출하는 연산자,기억)
* [](배열 연산자..배열은 객체다 라는것 기억)
* ()(괄호 연산자)-->다 아시죠??
*
* 2.단항 : !(논리 부정), ~(비트 반전), +/-(부호연산), ++/--(선행증감)
* (cast)케스팅 연산자
*
* 3.산술 : +,-,*,/,%(모듈러 연산자,나눈후 나머지 값을 취하는 연산자)
*
* 4.쉬프트 : <<,>>,>>>
*
* 5.관계 : >,<,>=,<=,==(값이 같니? 객체에서는 틀림),!=(값이 같지 않니?)
*
* 6.비트 : &, |, ^
*
* 7.논리 : &&(And 개념), ||(Or 개념), &, |
*
* 8.삼항 : 조건식 ? 조건이 true시 리턴 값 : false 시 리턴 값
*
* 9.배정대입 : =, +=, *=, -=,....많음..
*
* 10.후행증감 : ++/--
*/
public class KH0012_YonsanjaExam {
/**
* comment: 연산자 연습
*/
public static void main(String[] args) {
int a = 1;
// a의 값을 1 증가 해봅니다.
int b = ++a; // 예상: b=2, a=2
int c = ++b + --a; // 예상: c=4, b=3, a=1
int d = c-- + b++ + a; // 예상: a=1, b=4, c=3, d=8
System.out.println("[전위후위 연산자] =========================================");
System.out.println("[RESULT_01] a=" +a+ ", b=" +b+ ", c=" +c+ ", d=" +d );
a = 0;
b = ++a; // a=1, b=1
c = b--; // a=1, b=0, c=0
// System.out.println("[RESULT_temp] a=" +a+ ", b=" +b+ ", c=" +c );
d = ++c - --b + ++a; // a=2, b=?, c=1, d=?
System.out.println("[RESULT_02] a=" +a+ ", b=" +b+ ", c=" +c+ ", d=" +d );
System.out.println("[모듈러 연산자 (%) ] =========================================");
//모듈러 연산자 (%) : 일단 나눈후 나머지값을 반환하는 연산자 입니다.
//특징은 나누는 값이 더 클 경우엔 작은수를 리턴합니다.
a = 2; b = 2;
c = 2 % 2; // c=0
c = ++a % b; // c=1 a=3, b=2
a = 5; b = 6;
c = a % b; // c=1
System.out.println("[RESULT_03] a=" +a+ ", b=" +b+ ", c=" +c);
int code = 1;
int result = code % 2; // result = 1
// same code
if(result == 0) {
System.out.println("You are Woman.");
} else {
System.out.println("You are Man");
}
// same code
String gender = code % 2 != 0 ? "Man" : "Woman"; // ? true:false
System.out.println("You are " + gender + "." ); // Man
// ############################################################################
System.out.println("[비트 시프트 연산] =========================================");
//10의 비트를 보고 >>2 해봅니다.
int sh = 10;
System.out.println("10 은 1010 : BinaryString =====>" + Integer.toBinaryString(sh));
System.out.println("1010을 >> 2 한값은 0010 이므로 10진수로 2 이고 : BinaryString ??? =====> " + Integer.toBinaryString(sh >> 2));
sh = 2;
System.out.println(Integer.toBinaryString(sh << 3));
sh = -1;
System.out.println(Integer.toBinaryString(sh));
sh = sh >>> 2;
System.out.println(sh);
System.out.println(Integer.toBinaryString(sh));
sh = -1;
System.out.println(Integer.toBinaryString(sh));
sh = sh>>>2;
System.out.println("-------------------");
System.out.println(sh);
System.out.println(Integer.toBinaryString(sh));
// 여기 까지 보류....시프트 연산은 다시...
// ############################################################################
System.out.println("[논리 연산] =========================================");
boolean bb = true;
boolean cc = true;
if((false && cc) && (true && false)) {
System.out.println("실행문");
}
int t = 1;
if((bb && cc) | (++t > 0)) {
System.out.println("t1 ===> " + t);
}
System.out.println("t2 ===> " + t);
int sh2 = -1;
sh2 = ~ sh; // 비트반전
System.out.println("반전된 sh2 bit : " + Integer.toBinaryString(sh2));
boolean isCon = true;
if(!isCon) {
System.out.println("게임다시시작함..");
} else {
System.out.println("게임끝냄"); // 이게 나올것 같음..OK!
}
a = 1;
a += 1; // a = a + 1 a=2
a *= 2; // a=4
a %= 4; // a=0
System.out.println("[result] a=" + a );
//아래의 코드를 분석해서 결과 타입과 값을 추출해 보세요..
//본인이 직접 분석하고 결과를 출력해서 비교하세요.
//4 + 5 > 2 - 1 * 7 && (12 & 3 * 2) > 7 || -2 != 2
System.out.println(4 + 5 > 2 - 1 * 7 && (12 & 3 * 2) > 7 || -2 != 2);
}
}