연산자

강상은·2023년 12월 4일
0

JAVA

목록 보기
4/7

1. 산술연산자,나머지연산자

int a = 6, b = 4;

double c = 4.0;

System.out.println(a + " + " + b + " = " + (a + b) );

System.out.println(a + " - " + b + " = " + (a - b) );

System.out.println(a + " * " + b + " = " + a * b );

System.out.println(a + " / " + b + " = " + a / b );   // 동일 타입끼리의 연산 결과는 타입 유지.

System.out.println(a + " / " + c + " = " + a / c );   // 상대적으로 작은 데이터 타입과 큰 데이터 타입끼리의

                                                      // 연산은 호환이 되는 경우 큰 데이터 타입으로 확장.

// - 연산은 호환이 되는 경우 큰 데이터 타입으로 확장.

나머지를 이용한 수식


public class Main {
   public static void main(String[] args) {
      System.out.println("6 % 4 = "+ 6 % 4);
      System.out.println("7 % 3 = "+ 7 % 3);
      System.out.println("10.0 % 4.2 = "+ 10.0 % 4.2); //실수인 경우 실수로 결과값 산출
      System.out.println("14 % 2 = "+ 14 % 2);
      System.out.println("15 % 2 = "+ 15 % 2);
      
      // 짝수 홀수 구하는 공식으로 사용 가능
      System.out.println(18 % 2 == 0);   => 짝수          // x는 2의 배수, 2는 x의 약수
      System.out.println(17 % 2 == 1);   => 홀수
      
      // 나머지 = x % 제수 => 0 ~ 제수 -1
      // ex ) x % 3 => 0~2
      
   }
}

2. 복합대입연산자

int value = 2;

value += 3;								// value = value + 3 (원식값) > value += 3 으로 적은것

System.out.println("value = " + value); // 개별 연산값이 아니라 행을 내려가면서 계속 변수값이 달라지는 것

value -= 2;

System.out.println("value = " + value);

value = 3;

System.out.println("value = " + value);

value /= 2;

System.out.println("value = " + value);

value %= 2;

System.out.println("value = " + value);

// value = value - 2 + 3

value -= 2 + 3; //복합대입 연산의 경우 우변의 중복되는 변수를 없애고 연산자를 대입 연산자 앞에

//-표기함으로써 부호와 구분하기 위한 축약된 문법, 문법상 우변에 실제 변수가

//존재하는 것이 아니므로 우변의 연산(2 + 3)이 선 처리되고 좌변과 연산하여

//다시 좌변에 대입하는 형태, 결과적으로 "value = value -(2 + 3)"의

//형태로 처리, 이를 잘못 이해하여 단순한 변환을 적용

//-"value = value - 2 + 3"의 형태로 이해하는 오류에 주의.

System.out.println("value = " + value);

3. 증감연산자(전위,후위)

int value = 2;

int a = ++value;

System.out.println("value = " + value + ", a = " + a);  // 전위 : 선 증가 후 리턴.

// value = 3, a = 3

a = value++;

System.out.println("value = " + value + ", a = " + a); // 후위 : 리턴 후 증가.

// a = 3, value = 4

a = --value;

System.out.println("value = " + value + ", a = " + a); // 전위 : 선 감소 후 리턴.

// value = 3, a =3

a = value--;

System.out.println("value = " + value + ", a = " + a); // 후위 : 리턴 후 감소.

// a = 3, value = 2
public class Main {
   public static void main(String[] args) {
      int value = 3;
      
      int a = ++value;   // value = value + 1, 후 a값 산출      
      System.out.println("value = "+ value + ",a = "+ a ); // value = 4, a = 4
      a = value++;      // a값이 나오고 value = value + 1
      System.out.println("value = "+ value + ",a = "+ a ); // a = 4, value = 5
      a = ++value;      // value = value + 1, 후 a값 산출
      System.out.println("value = "+ value + ",a = "+ a ); // value = 6, a = 6
      a = value--;      // a값 나오고 value = value - 1
      System.out.println("value = "+ value + ",a = "+ a ); // a = 6, value = 5
      a = --value;      // value = value - 1, 후 a값 산출
      System.out.println("value = "+ value + ",a = "+ a ); // value = 4, a = 4
    
   }
}

단독으로 쓰일 경우 ++value(전위형), value++(후위형) 결과는 같다.

변수와 같이 쓰일 경우(순서 차이) => 증감 후 a값 저장할 것인지, 저장 후 증감할 것인지의 차이.

1) a = ++value(전위형)은 value 값을 계산 후 산출 후에, a값 산출 => value값과 a값이 동일하게 출력
2) a = value--(후위형)은 a값을 먼저 산출하고, 마지막에 value - 1을 계산 후 산출

4. 논리(부정) 연산자

논리 연산자 : and(&&), or(||), not(!)

⇒ 결과 값이 true 또는 false로 출력이 되야함.

  • && => 그리고, ~이면서 : 둘 다 참이면 참
    최초에 false 값에 평가 끝. ( 단락 평가 성질 ) => false로 결과값 산출
	
		System.out.println(false && false);
		System.out.println(true && false);
		System.out.println(false && true);
		System.out.println(true && true);
		System.out.println();
		
  • || => 또는, ~이거나 : 둘 중 하나만 참이면 참
    • true값이 하나라도 있으면 true로 결과값 산출
  • 최초에 true 값에 평가 끝. => true로 결과값 산출
	System.out.println(false || false);
		System.out.println(true || false);
		System.out.println(false || true);
		System.out.println(true || true);
		System.out.println();
		
  • ! => ~ 가 아니다 (논리 부정 연산자)
System.out.println(!true);
		System.out.println(!false);

단순한 식과 복잡한 식을 입력할때 뭘 먼저 넣을까 생각해보면 간단한 식을 먼저 넣는게 수월함

5. 삼항 조건 연산자 형식

조건식 ? 참일때 값 또는 식 : 거짓일때 값 또는 식

int value = 8;
		
		System.out.println(value > 5 && value < 10);       // &&(AND) : 둘 다 참이면 참.
		System.out.println(value > 5 || value < 10); 	   // ||(OR) : 둘 중 하나만 참이면 참.
		System.out.println( !(value > 5 && value < 10) );  // !(NOT) : 부정.
  • 삼항조건 연산자가 제어문이 아닌 연산자(+를 의미함) 임을 인지함으로써, 11행의 연산 순서를 감안하여 삼항조건 연산자
  • 구문 전체에 대하여 반드시 괄호로 묶어야 함에 주의.
  • 11행의 삼항조건 연산자 구문( value % 2 == 0 ? "짝" : "홀 " )을 괄호로 묶지 않고 직전의 문자열
  • "value는 "와 "+"연산자를 그대로 연결하여 사용을 하면 연산 순서에 따라 선두의 문자열과 삼항조건 연산자의
  • "(value % 2 == 0)"구문이 먼저 연산이 진행되는데, 이 때 boolean이 문자열로 확장되어 문자열 결합
  • 진행이 되고 이에 따라 삼항조건 연산자의 조건식 부분에 문자열이 오게 되는 논리적 오류 발생.
System.out.println("value " + ( value % 2 == 0 ? "짝" : "홀 " ) + "수입니다.");

=> 삼항 조건식에 ()가 없을 경우 연산 결과인 boolean값이 문자열로 확장이 되어서
참 혹은 거짓 일때의 값 또는 식 출력에 에러가 난다.

조건식1 ? 실행1 : 조건식2 ? 실행2 : 실행3
이 경우 조건문(if문)을 쓰는 것이 바람직함.

5.1 삼항 조건 연산자 예제

 int n;
		int n1;
		
		Scanner sc = new Scanner(System.in);
		
		
		System.out.println("첫번째 정수 입력" + " : ");
		n = sc.nextInt();
		System.out.println("두번째 정수 입력" + " : ");
		n1 = sc.nextInt();
		
		System.out.printf("\n%s" + n > n1 : n1 > n  );
		System.out.printf();
		
		
		sc.close();
		
//좀 더 정리된 코드	
Scanner sc = new Scanner(System.in);
		int n1, n2;
		
		System.out.print("정수1 : ");
		n1 = sc.nextInt();
		System.out.print("정수2 : ");
		n2 = sc.nextInt();
		
		//1)System.out.printIn( n1 > n2 ? "큰 수는 " + n1 : n1 == n2 ? "같음" : " 큰 수는 " + n2);
		// " 큰 수는 " < 이 중복되므로 아래 코드처럼 좀 더 간결하게 작성 가능 
		
		//2)System.out.printIn( n1 == n2 ? "같음" : "큰 수는 " + (n1 > n2 ? n1 : n2) );
			// 예외적인 경우를 먼저 작성 
		
		//sc.close();

5.2 if와 삼항 조건 연산자를 둘 다 활용한 예제

class Test {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int n1, n2;
      int result;
      
      System.out.print("정수1 : ");
      n1 = sc.nextInt();
      System.out.print("정수2 : ");
      n2 = sc.nextInt();
      
     if ( n1 == n2 ) {
    	 System.out.println("같음");
     } else {
    	 System.out.printf("큰 수는 %d", n1 > n2 ? n1 : n2);
     }

5.3 연산자를 활용한 예제

```
int n1 = 3, n2 = 5, n3;


n1 += (++n2);				// n2 = 6, n1 = 9
n2 -= (n1--);				// n2 = -3, n1 = 8
n3 = (++n1) - (n2++);		// n1 = 9, n3 = 12, n2 = -2

System.out.printf("n1=%d, n2=%d, n3=%d\n", n1, n2, n3);

//팀원들과 직접 풀이한 식	
// n1 += (++n2);		
// n1 + (n2+1) 
// n1=9, n2 =6
// n1=3 n2=6    
// n2 -= (n1--);		
// n2 - n1 = -3  	
// n1 = 8 n2 = -3	
// n1-1 //n3= 9 - (-3) =12   (++n1) - (n2++) //식을 풀때 괄호가 쳐져있어도 순서 상관 없음
//n2 = -2 
//n1 = 9

틀린 이유 : 식을 계산하는 순서에 주의할 것 + 값은 내려오면서 계속 바뀜


 int n;
		System.out.print("1 ~ 100 사이의 자연수를 입력" + " : " );
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt(); 
		
		
		System.out.println("\n" + (n >= 2 && n <= 99 ? "정확히 입력!!" : "입력 오류") );
	
		
		sc.close();		
		
    //선생님이 만든 코드
		//Scanner sc = new Scanner(System.in);
		
		//int = n;
		
		//System.out.print("1 ~ 100 사이의 자연수를 입력" + " : " );
		//n = sc.nextInt();
		
		1)//System.out.printf("\n%s", n > 1 && n < 100 ? "정확히 입력!!" : "입력 오류" );
		2)//System.out.printf("\n%s", n >= 2 && n <= 99 ? "정확히 입력!!" : "입력 오류" );
		
		//sc.close();

0개의 댓글

관련 채용 정보