[JAVA]연산자(2)

Hyeok·2022년 10월 17일
3

JAVA

목록 보기
7/10
post-thumbnail

🔎오늘의 목표

  1. 산술 변환
  2. Math.round()로 반올림하기
  3. 나머지 연산자
  4. 비교 연산자
  5. 문자열의 비교
  6. 논리 연산자 && , ||
  7. 논리 부정 연산자
  8. 조건 연산자
  9. 대입 연산자
  10. 복합 대입 연산자

1. 🔎산술 변환

이항 연산자는 두 피연산자의 타입이 일치해야하 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치시켜야한다.
이처럼 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것을
'산술변환' or '일반 산술변환' 이라 하며, 이항 연산에서만 아니라 단항
연산에서도 일어난다. 규칙은 다음과 같다.

    1. 두 피연산자의 타입을 같게 일치시킨다.( 보다 큰 타입으로 일치)
  • (1)
    long + int ---> long + long ---> long
    float + int ---> float + float ---> float
    double + float ---> double + double ---> double
    1. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

(2)
byte + shory ---> int + int ---> int
char + short ---> int + int ---> int

1-1 Ex)


public class Ex3_7 {

	public static void main(String[] args) {
		System.out.println(5/2);
		System.out.println(5/(float)2);

	}

}

결국 산술 변환이란, 그저 연산 직전에 발생하는 자동 형변환일 뿐이다.

1-2 Ex)


public class Ex3_8 {

	public static void main(String[] args) {
		byte a = 10;
		byte b = 30;
		byte c = (byte)(a * b);
		System.out.println(c);

	}
    
    이 예제를 실행하면 44가 화면에 출력된다. 10 * 30 = 300이지만
    형변환에서 배운 것 처럼 큰 자료형에서 작은 자료형으로 변환하면
    데이터 손실이 발생하므로 값이 바뀔 수 있다.
    300byte형의 범위를 넘어가기 대문에 데이터 손실이 발생한다.
    

1-3 Ex)


public class Ex3_9 {

	public static void main(String[] args) {
		int a = 1_000_000; // 1,000,000 1백만 = 10의 6제곱
		int b = 2_000_000; // 2,000,000 2백만 = 10의 6제곱
		
		// 10의 12제곱. int의 범위는 10의 9제곱
		
		long c = a * b; // (long)로 형변환을 하지않으면 -14----가 나온다 오버플로우
      // a * b = 2,000,000,000,000 ?  
     
		
		
		System.out.println(c);
		
	}

}

1-4 Ex)

public class Ex3_10 {

	public static void main(String[] args) {
		long a = 1_000_000 * 1_000_000;
		long b = 1_000_000 * 1_000_000L;
		
		System.out.println("a = "+a);
		System.out.println("b="+b);		
		
        위처럼 코드를 실행하면 a는 -72-----가 나오며
        b는 10----------가 나온다 
	}

}

2.🔎Math.round()로 반올림하기

Math.round()를 사용하여 소수점 첫째 자리에서 반올림한 결과를 정수로 반환한다.

2. Ex)


public class Ex3_11 {

	public static void main(String[] args) {
		double pi = 3.141592; // 2. 3.141 읃으려면?
		
		(1)
		double shortPi = Math.round(pi * 1000) / 1000.0;
		System.out.println(shortPi);
	> 3.142
        
        (2)
		System.out.println(pi*1000);
		System.out.println((int)(pi*1000));
		System.out.println((int)(pi*1000)/1000);
		System.out.println((int)(pi*1000)/1000.0);
	> 3141.592 , 3141 , 3 , 3.141 
		
        (3)
		System.out.println(pi);
		System.out.println(pi*1000);
		System.out.println(Math.round(pi*1000));
		System.out.println(Math.round(pi*1000)/1000);
		System.out.println(Math.round(pi*1000)/1000.0);
	> 3.141592 , 3141.592 , 3142 , 3 , 3.142 		
		
	
	}

}

위처럼 Math.round()로 반올림한 값을 얻을 수 있다.

3.🔎 나머지 연산자

나머지 연산자는 주로 짝수 , 홀수 또는 배수 검사등에 주로 사용된다.

3-1. Ex)


public class Ex3_12 {

	public static void main(String[] args) {
		
		int x = 10;
		int y = 8;
		
		System.out.printf("%d를 %d로 나누면, %n", x ,y);
		System.out.printf("몫은 %d이고, 나머지는 %d입니다.%n", x/y , x % y);
		
		> 108로 나누면
        > 몫은 1 이고 나머지는 2입니다.

	}

}

3-2. Ex)


public class Ex3_13 {

	public static void main(String[] args) {
		
		System.out.println(-10%8);
		System.out.println(10%-8);
		System.out.println(-10%-8); 
        //그냥 피연산자의 부호는 무시하고, 
        //나머지 연산을 한 결과에 왼쪽 피연산자의 부호를 붙이면 된다.
        
        > -2
        > 2
        > -2
		
	}

}

위에 예시는 그냥 피연산자의 부호는 무시하고,
나머지 연산을 한 결과에 왼쪽 피연산자의 부호를 붙이면 된다.

4.🔎 비교 연산자

비교 연산자는 두 피연산자를 비교하는 데 사용되든 연산자다.
주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 오직 true,false 둘 중의 하나이다.

  • 4-1 대소비교 연산자 < , > , <= , >=

    비교연산자연산결과
    >좌변 값이 크면, true 아니면 false
    <좌변 값이 작으면 , true 아니면 false
    >=좌변 값이 크거나 작으면 , true 아니면 flase
    <=좌변 값이 작거나 같으면 , true 아니면 false
  • 등기비교 연산자 == , !=

    비교연산자연산결과
    ==두 값이 같으면 , true 아니면 false
    !=두 값이 다르면 , true 아니면 false

5.🔎문자열의 비교

두 문자열을 비교할 때는 , '==' 대신 equals()라는 메서드를 사용해야 한다.
비교연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이
같은지 비교하기 위해서는 equals()를 사용하는 것이다. equals()는 비교하는
두 문자열이 같으면 true를 다르면 false를 반환한다.

  • String str = new String("abc");

    	equals()는 두 문자열의 내용이 같으면 true; , 다르면 false반환 
    	boolean result = str.equalse("abc"); // 내용이 같으므로 true 저장
  • String은 클래스이므로, 아래와 같이 new를 사용해서 객체를 생성해야한다.

    	String str = new String("abc); // String클래스의 객체를 생성 
    	String str = "abc"; // 위의 문장을 간단히 표현했다

5-1 Ex)


public class Ex3_14 {

	public static void main(String[] args) {
		String str1 = "abc";
		String str2 = new String("abc");
		
		System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc"=="abc");
		System.out.printf("str1 ==\"abc\" ? %b%n", str1=="abc");
		System.out.printf("str2==\"abc\" ? %b%n", str2=="abc");
		System.out.printf("str1.equals(\"abc\") ? %b%n", str1.equals("abc"));
		System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc"));
		System.out.printf("str2.equals(\"ABC\") ? %b%n", str2.equals("ABC"));
		System.out.printf("str2.equalsIgnoreCase(\"ABC\") ? %b%n" , str2.equalsIgnoreCase("ABC"));
	

>"abc"=="abc" ? true
  str1 =="abc" ? true
  str2=="abc" ? false
  str1.equals("abc") ? true
  str2.equals("abc") ? true
  str2.equals("ABC") ? false
  str2.equalsIgnoreCase("ABC") ? true
	}

}

6.🔎 논리 연산자 && , ||

|| (OR결합) 피연산자 중 어느 한 쪽이 true면 true를 결과로 얻는다.
&& (AND결합) 피연산자 양쪽 모두 ture이어야 true 를 결과로 얻는다.

xyx \\ yx && y
TrueTrue -->TrueTrue
truefalse -->Truefalse
Falsetrue -->Truefalse
FalseFalse -->FalseFalse

위처럼 논리 연산자의 표를 알 수 있다.

  • 예를 들어보자

    	1. x는 10 보다 크고 , 20보다 작다. =>>	x > 10 && x < 20 or 10 < x && x < 20  오른쪽 예시가 좀 더 가독성이 좋은거같다. 
    	2. i는 2의 배수 or 3의 배수이다. =>> i%2==0 || i%3==0 이다.
    	3. i는 2의 배수 or 3의 배수지만 6의 배수는 아니다. =>>  (i%2==0 || i%3==0) && i%6!=0 이런식의 식이 나타난다.
    	4. 문자 ch는 숫자('0'~'9')이다. =>> '0' <= ch && ch <= '9' 의 식이 나온다 
    	5. 문자 ch는 대문자 또는 소문자이다. =>> ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') 같은 식이 나온다.

6-1 Ex)

import java.util.Scanner;

public class Ex3_15 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		char ch = ' ';
		
		System.out.printf("문자를 하나 입력하세요.>");
		
		String input = scanner.nextLine();
		ch = input.charAt(0);
		
		if ('0' <= ch && ch <= '9') {
			System.out.printf("입력하신 문자는 숫자입니다.%n");
		}
		
		if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) {
			
			System.out.printf("입력하신 문자는 영문자입니다.%n");
			
		}

	}

}

> 문자를 하나 입력하세요.>8  입력하신 문자는 숫자입니다.
> 문자를 하나 입력하세요.>a  입력하신 문자는 영문자 입니다.

7.🔎 논리 부정 연산자 ! (not)

논리 부정 연산자는 간단히 말하면, true와 false를 반대로 바꾸는 것 이다.

  • 논리 부정 연ㄴ산자 '!'가 자주 사용되는 곳은
  1. 조건문
  2. 반복문의 조건식
  • 예를 들어보자


public class Ex3_16 {

	public static void main(String[] args) {
		
		boolean b = true;
		char ch = 'C';
		
		System.out.printf("b=%b%n", b);
		System.out.printf("!b=%b%n", !b);
		System.out.printf("!!b=%b%n", !!b);
		System.out.printf("!!!b=%b%n", !!!b);
		System.out.println();
		
		
		System.out.printf("ch=%c%n", ch);
		System.out.printf("ch < 'a' || ch > 'z' = %b%n", ch <'a' || ch > 'z');
		System.out.printf("!('a' <=ch && ch <='z')=%b%n", !('a' <=ch && ch<='z'));
		System.out.printf(" 'a' <=ch && ch<='z' = %b%n", 'a' <=ch && ch<='z' );
				
	}

}
> 
b= true
!b = false
!!b= true
!!!b= false

ch= C
ch < 'a' || ch > 'z' = true 
!('a' <= ch && ch <= 'z' )=  true
'a' <=ch && ch <= 'z' = false 

8.🔎 조건 연산자

조건 연산자는 조건식, 식1 , 식2 모두 세 개의 피 연산자를 필요로 하는 삼항 연산자이며, 삼향 연산자는 조건 연산자 하나뿐이다.

  • 조건 연산자를 가볍게 나타내면

    	1.result = (x > y) ? x : y ; // 괄호 생략 가능
    	2.result = (5 > 3) ? 5 : 3 ;
    	-> (true) ? 5 : 3 ;
    	-> result = 5;

8-1 Ex)



public class Ex3_17 {

	public static void main(String[] args) {
		int x, y, z;
		int absX, absY, absZ;
		char signX, signY, signZ;
		
		
		
		x = 10;
		y = -5;
		z = 0;
		
		absX = x >= 0 ? x : -x ; 
		absY = y >= 0 ? y : -y ; 
		absZ = z >= 0 ? z : -z ;
		signX = x > 0 ? '+' : ( x==0 ? ' ': '-');
		signY = y > 0 ? '+' : ( y==0 ? ' ': '-');
		signX = z > 0 ? '+' : ( z==0 ? ' ': '-');
		
		System.out.printf("x=%c%d%n", signX , absX);
		System.out.printf("y=%c%d%n", signY , absY);
		System.out.printf("z=%c%d%n", signZ , absZ);
		
	}

}

>
X= +10
Y= -5
Z= 0

9.🔎 대입 연산자

대입 연산자는 변수와 같은 저장공간에 값 or 수식의 연산결과를 저장하는데 사용된다.
오른족 피연산자의 값을 왼쪽 피연산자에 저장한다. 그리고 저장된 값을 연산결과로 반환된다.

  • 예를들어
    => System.out.println(x = 3);
    => System.out.println(3); 출력

lvalue 와 rvalue
왼족 피연산자를 lvalue라고 하며 오른쪽을 rvalue라고 한다.
-> X = 3 라고 가정하면
x 를 lvalue(저장공간) 3를 rvalue라고 한다.

10.🔎 복합 대입 연산자

대입 연산자는 다른 연산자와 결합하여 사용할 수 있다. 다음과 같이 표현 가능하다.

op==
i +=3;i = i + 3;
i -=3;i = i - 3;
i * =3;i = i * 3;
i /= 3;i = i / 3;
i %= 3;i = i % 3 ;
i <<= 3;i = i << 3;
i >>= 3;i = i >> 3;
i &= 3;i = i & 3;
i ^= 3;i = ^ 3;
i \= 3;i = \ 3;
i *= 10 + j ;i = i * (10 + j);

내용이 꽤 많다 복습이 필요한 부분이다.

profile
안녕하세요.

0개의 댓글

관련 채용 정보