본문 바로가기
👨‍💻 2. 웹개발_Back end/2-1 Java

[JAVA] 03-2 연산자의 종류

by 달님🌙 2021. 7. 26.
반응형
부호 연산자

- 양수, 음수를 표시하는 +, - 기호를 사용한다

byte b = 5;
byte result = -b; //컴파일 에러
		
byte b = 5;
int result = -b;

에러 내용 : Type mismatch: cannot convert from int to byte (int를 byte로 바꿀 수 없다.)

해결법 : - b 는 int 타입이므로 int에 저장해야한다.

 

증감 연산자

- 전위 수식 : 다른 연산자와 함께 사용될 때 다른 연산을 수행하기 에 처리한다.

- 후위 수식 : 다른 연산자와 함께 사용될 때 다른 연산을 수행한 에 처리한다.

 

** x = 20 일때 다음 예제를 풀어보자

출처 : 전위 후위 연산자 참고자료

 

① 후위 연산자이므로 20 + 5 = 25 를 먼저 해준다.

② x = 20 - 1 =19 가 된다.

③ 전위 연산자이므로 x = 19 - 1 = 18 을 먼저 해준다.

④ y = 25 +18

⑤  = 43 이 된다.

 

**  증감 연산자 예제

int x = 10;
int y = 10;
int z;

System.out.println("--------------------");
x++;
++x;
System.out.printf("x= %d\n", x); // x = 12

System.out.println("--------------------");
y--;
--y;
System.out.printf("y= %d\n", y); // y = 8

System.out.println("--------------------");
z = x++;
System.out.printf("z= %d\n", z); // z = 12
System.out.printf("x= %d\n", x); // x = 13

System.out.println("--------------------");
z = ++x;
System.out.printf("z= %d\n", z); // z = 14
System.out.printf("x= %d\n", x); // x = 14

System.out.println("--------------------");
z = ++x + y++;		
System.out.printf("z= %d\n", z); // z = 15 + 8 = 23
System.out.printf("x= %d\n", x); // x = 15
System.out.printf("y= %d\n", y); // y = 9

 

논리 부정 연산자

- ' ! ' 부호를 사용하며 true를 false로 , false를 true로 상태를 바꿔준다.

- boolean 타입에서만 쓸 수 있다. 

 

** 논리 부정 연산자 예제 

boolean play = true;
System.out.println(play);

play = !play;
System.out.println(play);

 

산술 연산자

- 사칙연산(+ -  ×  ÷ ) 을 하기 위한 연산자이다.

- 실제로는 ( + -  *  / ) 를 사용한다.

- 나눗셈 결과 나머지를 추출해내는 % 도 알아두자

 

** 산술 연산자 예제 

int v1 = 5;
int v2 = 2;

int result1 = v1 + v2;
System.out.println("result1=" + result1); // 7

int result2 = v1 - v2;
System.out.println("result2=" + result2); // 3

int result3 = v1 * v2;
System.out.println("result3=" + result3); // 10

int result4 = v1 / v2;
System.out.println("result4=" + result4); // 2

int result5 = v1 % v2;
System.out.println("result5=" + result5); // 1

double result6 = (double) v1 / v2;
System.out.println("result6=" + result6); //2.5

 

비교 연산자

-  <  <=  >  >=  ==  !=  이용하여 피연산자의 대소 및 동등을 비교한다

- 주로 If문과 For문, While문에서 흐름을 제어할 때 사용된다. 

 

** 비교연산자 예제 

int num1 = 10;
int num2 = 10;
boolean result1 = (num1 == num2);
boolean result2 = (num1 != num2);
boolean result3 = (num1 <= num2);
System.out.println("result1=" + result1); //true
System.out.println("result2=" + result2); //false
System.out.println("result3=" + result3); //true

char char1 = 'A';
char char2 = 'B';
boolean result4 = (char1 < char2);
System.out.println("result4 =" + result4); //true
System.out.printf("result4 = %b\n", char1 < char2); //true

 

** 불이야! 게임 예제

int count = 10;
while(count != 0) {
	Thread.sleep(500);
	System.out.println(count--);
}
System.out.println("fire!!!");

- Tread.sleep(1000); => 스레드가 1초 동안 일시정지 상태가 됨 

- Tread.sleep(1000); => 0.5초 ..

 

== 사용시 주의할 점

- 연산식 0.1 == 0.1f   -> false

- 이유는 0.1f 는 사실 0.10000000149011612 이다. 이를 근삿값으로 표현해준 것이다.

- 따라서 == 을 사용하게되면 완전히 같아야지만 true 가 뜨기 때문에 이 경우는 false.

 

**  "==" 사용 예제

int a1 = 1;
double a2 = 1.0;
System.out.println(a1 == a2); //true

double a3 = 0.1;
float a4 = 0.1f;
System.out.println(a3 == a4);  //false
System.out.println((float)a3 == a4); //true

 

문자열 비교할땐 equlas() 메소드 사용
String strVar1 = "사과"; 
String strVar2 = "사과";
System.out.println(strVar1 == strVar2); // 이렇게 사용하지않음
System.out.println(strVar1.equals(strVar2)); //true

- String은 참조타입이므로 문자열을 비교할 때 ==, != 을 사용하지않는다. ( Chapter 5 에서 다룰 예정 )

 

논리 연산자
int charCode = 'A';

if ((charCode>=65) & (charCode<=90)) {
	System.out.println("대문자군요");
}

if ((charCode>=97) && (charCode<=122)) {
	System.out.println("소문자군요");
}

if (!(charCode<48) && !(charCode>57)) {
	System.out.println("0~9 숫자군요");
}
대문자군요

 

int value = 6;

if ((value%2==0) | (value%3==0)) { 
	System.out.println("2 또는 3의 배수군요");
}

if ((value%2==0) || (value%3==0)) {
	System.out.println("2 또는 3의 배수군요");
}
2 또는 3의 배수군요

- | 와 || 는 같은 의미이다

 

LogicalOperatorExample 예제 변형

 

// 문제 변형 :  문자를 입력받아서 할것

int str;
System.out.println("하나의 문자를 입력하시오 = ");
str = (int)System.in.read();

System.out.println(str);

if ((str>=65) & (str<=90)) {
System.out.println("대문자군요");
}

if ((str>=97) && (str<=122)) {
System.out.println("소문자군요");
}

if (!(str<48) && !(str>57)) {
System.out.println("0~9 숫자군요");
}

int value = 6;

if ((value%2==0) | (value%3==0)) {
System.out.println("2 또는 3의 배수군요");
}

if ((value%2==0) || (value%3==0)) {
System.out.println("2 또는 3의 배수군요");
}

 

 

대입 연산자
int result = 0;
result += 10;
System.out.println("result=" + result); // 10
result -= 5;
System.out.println("result=" + result); // 5
result *= 3;
System.out.println("result=" + result); //15 
result /= 5;
System.out.println("result=" + result); //3
result %= 3;
System.out.println("result=" + result); //0

 

삼항 연산자
int score = 85;
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');
System.out.printf("%d점은 %c등급입니다.\n",score, grade);

 

비트 연산자

 

		/****************************************
		 * 비트연산자( |, &, ^, ~, <<, >> )
		 * 
		 * 
		 * 		or	 and	 xor
		 *  x    y      x | y   x & y   x ^ y
		 * **************************************
		 *  1	 1	 1	 1	 0
		 *  1	 0	 1	 0	 1
		 *  0 	 1	 1	 0	 1
		 *  0 	 0	 0	 0	 0
		 */
		
		int a = 9; 
		int b = 11;
		
		String str = "71";
		int num = Integer.parseInt(str);
		System.out.println(num); //71
		
		//		1001 -> 9
		//		1011 -> 11
		// &  연산시 	1001 -> 9
		// || 연산시 	1011 -> 11
		
		System.out.println(Integer.toBinaryString(a)); //1001
		System.out.println(Integer.toBinaryString(b)); //1011
		
		System.out.println("10진수: " + (a & b)); //9
		System.out.println("10진수: " + (a | b)); //11
		// &&, || 와 다른점은 비트끼리 비교연산이 가능하다는 점이다.
		
		System.out.println("3<<2: " + (3<<2)); //12
		// 0011 -> 1100 (비트를 왼쪽으로 2 칸 이동)
		System.out.println("128>>5: " + (128>>5)); //4
		// 1000 0000 -> 0000 0100 (비트를 오른쪽으로 5 칸 이동)

 

** and 와 or 조건 사용시 주의할 점

- 조건① && 조건② 에서 조건①이 false면 뒤에껀 볼 필요도 없이 전체 식이 false가 되므로 그 구문을 바로 빠져나오기 때문에 조건2는 연산이 이뤄지지않는다.

- 조건① || 조건② 에서 조건①이 true면 식 전체가 true이되므로 그 구문을 바로 빠져나오기 때문에 조건2는 연산이 이뤄지지않는다.

 

int num1 = 0, num2 = 0;
boolean result;

result = ((num1 += 10) < 0 && (num2 += 10) > 0); //and 조건
System.out.printf("num1=%d, num2=%d\n",num1,num2); // num1 = 10, num2= 0
		
result = ((num1 += 10) > 0 || (num2 += 10) > 0); //or 조건
System.out.printf("num1=%d, num2=%d\n",num1,num2); // num1 = 20, num2= 0

 

반응형

댓글