BlueHarmel
BlueHarmel Devlog
BlueHarmel
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (330)
    • Book (11)
    • Dev (29)
      • ArtCon (0)
      • ESTsoft 오르미 (29)
    • Study (290)
      • Web (18)
      • AWS (2)
      • 알고리즘 (1)
      • GameDev (1)
      • 정보처리기사 (201)
      • English (1)
      • Mathematics (24)
      • 머신러닝 (7)
      • 딥러닝 (10)
      • 네트워크 보안 (5)
      • R (4)
      • 컴퓨터 네트워크 (6)
      • 데이터베이스 (8)
      • 데이터 통신 (0)
      • 운영체제 (2)
      • TIL (0)
    • Project (0)
      • 개인 (0)
      • 단체 (0)

인기 글

hELLO · Designed By 정상우.
BlueHarmel

BlueHarmel Devlog

Dev/ESTsoft 오르미

연산자 / 조건문과 반복문

2024. 2. 22. 09:52

1. 연산자

  • 설명보기
    • 기본 자료형을 계산하기 위해 사용
    • 타입별 사용가능한 연산자가 있다.
      구분연산자비고
      결과가 boolean숫자 비교 연산자<, <=, >, >=
      숫자 동등 연산자==, !=
      결과가 int 혹은 long기본 사칙 연산자+, -, *, /, %
      증감 연산자++, --
      비트 연산자&, |, ^, ~, <<, >>, >>>많이 사용하지 않음
      기타 연산자삼항 연산자? :
      형 변환 연산자(타입)
      문자열 더하기 연산자+
    • 전위 연산자 : 다른 연산을 수행하기 전에 피연산자의 값을 1 증가 / 감소
    • 후위 연산자 : 값을 먼저 읽어온 후에 피연산자의 값을 1 증가 / 감소
      • 다음번에 피연산자를 호출하면 1 증가 / 감소
    • 이항 연산자 :
      • 피연산자들의 타입 규칙
        1. 피연산자들이 모두 int보다 크기가 작을 경우, int로 변환 후 연산
          1. byte + byte → int + int
        1. 피연산자 중에 long 타입이 있을 경우 모두 long으로 변환 후 연산
          1. int + long → long + long
        1. 피연산자 중에 float 혹은 double 타입이 있을 경우 크기가 큰 실수 타입으로 변환 후 연산
          1. int + float → float + float

    연산의 방향

    • 우선순위가 더 높은 연산자부터 실행
    • 우선순위가 같다면 왼쪽에 있는 연산부터 실행
      • 단, [대입 / 단항 / 부호] 연산자는 오른쪽에서 왼쪽으로 진행
      • int result2 = x = y = 5

    연산의 우선순위

    1. 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다.
    2. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다. 
    3. 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽(->)이다.
    4. 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정해준다. 

    연산자연산 방향우선 순위
    증감(++, --), 부호(+, -), 비트(~), 논리(!)←높음
    산술(*, /, %)→
    산술(+, -)→
    쉬프트(<<, >>, >>>)→
    비교(<, >, <=, >=)→
    비교(==, !=)→
    논리(&)→
    논리(^)→
    논리(|)→
    논리(&&)→
    논리(||)→
    조건(?:)→
    대입(=, +=, -=, *=, /=, %=, &=, ^=, …)←낮음
    • 오버플로우 : 자료형의 저장 범위를 초과했을 때 발생하는 현상
      int a = 1000000;
      int b = 1000000;
      int c = a * b;
      
      System.out.println(c);  // -727379968
    • 비교 연산
      • 둘중에 크기가 더 큰 타입으로 일치시킨다.
      • char 비교연산 : 유니코드 값
      • double 과 float 타입 비교
        0.1 == 0.1f  // false
        
        /*
        오른쪽의 0.1f가 double로 변환되어 0.1 == 0.1 의 결과로 true가 
        되어야할 것 같지만 그렇지 않습니다. 
        그 이유는 모든 부동소수점 타입은 0.1을 정확히 표기할 수 없어서
        0.1f는 0.1의 근사 값이(예를 들어 0.100000000149와 같은 값) 되기 때문
        */
      • String 비교 연산 :
        • 대소비교 : 불가능
        • 동등비교 : str1.equals(str2) {그냥 변수명은 주솟값을 저장하기 때문}
      • NaN, Infinity : 정의 | infinity / NaN 비교연산
    • 문자열 연결 연산자 (+) : 왼쪽부터 오른쪽으로 연산이 진행
      // 문자열 "Hello"와 123이 먼저 연산되어 "Hello123"이 되고,
      // 이것을 다시 456과 연산하여 "Hello123456"이 됩니다.
      System.out.println("Hello" + 123 + 456);  // Hello123456
      
      // 숫자 123과 456이 먼저 연산되어 579가 되고,
      // 이것을 문자열 "Hello"와 연산하여 "579Hello"가 됩니다.
      System.out.println(123 + 456 + "Hello");  // 579Hello
    • 비트 연산자
      • 비트 이동 연산자 (shift 연산자)
      연산식결과
      a << b정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워짐)
      a >> b정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 최상위 부호 비트(MSB)와 같은 값으로 채워짐)
      a >>> b정수 a의 각 비트를 b만큼 오른쪽으로 이동시키며, 새로운 비트는 전부 0으로 채워짐
      • 비트 논리 연산자 (&, |, ^, ~)
      xyx & y (AND)x | y (OR)x ^ y (XOR)
      11110
      10011
      01011
      00000
      • ~ (not) : 피연산자의 비트를 기준으로 not을 실행
    • 단항 연산자
      연산식설명
      ++피연산자다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킴
      --피연산자다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴
      피연산자++값을 먼저 읽어온 후에 피연산자의 값을 1 증가시킴
      피연산자--값을 먼저 읽어온 후에 피연산자의 값을 1 감소시킴
    • 삼항 연산자
      • 간단한 연산식이라면 if문 보다는 삼항연산자 한줄로 간단하게 사용하는 것이 더 효율적
      • 가독성을 해치지 않는 선에서 실무에서도 많이 사용

2. 조건문

  • 설명보기
    • if문
      • 조건식이 true일 때 블록 내부를 실행
    • Switch/case문
      • 입력변수가 어떤 값을 갖느냐에 따라 실행문을 선택
      • 입력변수 : byte, short, char, int, enum, String만 가능
      • 입력값이 정형화 되어있는경우에 사용
      • break를 붙이지 않으면 case값과 상관없이 뒤에 있는 case가 연달아 실행된다.

3. 반복문

  • 설명보기
    • for : 정해진 횟수만큼 반복
      for (초기화식; 조건문; 증감식) {
      	...
      }
    • for each문
      for (자료형 변수명: iterate) {
          body-of-loop
      }
      
      int[] intArr = {89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99};
          for (int number:intArr) {
              System.out.println(number);
          }
    • while문 : 조건식이 true일 경우에 계속해서 반복
      while (조건문) {
          <수행할 문장1>;
          <수행할 문장2>;
          <수행할 문장3>;
          ...
      }
    • do-while문
      do {
      		실행문; -> 조건식의 결과가 true일 때 실행될 문장
      		...
      } while (조건식);

4. 배열

  • 설명보기
    • 자료형 바로 뒤, 혹은 변수명 뒤에 [](대괄호)기호를 붙인다.
    • 선언 및 초기화
      String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
      
      String[] weeks = new String[7];   // 배열의 크기를 7로 먼저 설정하여 배열 변수 생성
      weeks[0] = "월";                   // 각 인덱스에 해당하는 값 대입 
      weeks[1] = "화";
      weeks[2] = "수";
      weeks[3] = "목";
      weeks[4] = "금";
      weeks[5] = "토";
      weeks[6] = "일";
    • 배열의 길이 : .length
      String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
      for (int i = 0; i < weeks.length; i++) {
      	System.out.println(weeks[i]);
      }

5. 기타

  • 설명보기
    • 디버깅 : 코드 라인숫자부분을 클릭하면 breakpoint를 만들 수 있다.
    • 해당 줄의 코드 실행전에 전체 실행이 일시정지 상태가 된다.
    • 비트 연산자는 실제 비트 마스킹에 사용된다.
    • 비트 연산자(&) 와 논리 연산자 (&&)의 차이점
      • 논리 연산자 (단축평가) : 앞의 식이 거짓이면 뒷 식은 실행하지 않는다
      • 비트 연산자 : 앞의 식이 거짓이어도 뒷 식이 실행된다.
    • 실행할 때, EditConfiguration을 통해 main 메소드의 입력값 args를 지정할 수 있다.
      • NaN 과 Infinity
      • NaN : Not a Number
        • 수학적으로 정의되지 않은 / 무의미한 연산의 결과
      • Infinity : 무한대의 개념. 숫자인 값인데 매우 큰 숫자라고.
        • 다른 값과 모든 연산이 불가하다.
        • 이 둘은 수학적 정의 상의 차이가 있음
      • 이 두 값에 어떤 연산을 해도 NaN 또는 Infinity가 되기 때문에 다음 연산을 수행해서는 안된다.

      • 자바에서 0이 아닌 실수(float, double)를 0으로 나누는 것은 양의 Infinity 또는 음의 Infinity 결과를 낳는다.
        double result = 5.0 / 0.0;
        System.out.println(result); // Infinity
        
        double negativeResult = -10.0 / 0.0;
        System.out.println(negativeResult); /// -Infinity
        • 정수형을 0으로 나누면 ArithmeticExcpetion이 발생하는 것과는 구분됨!

6. Daily Quiz

  • 설명보기
    Daily Quiz 01/29

'Dev > ESTsoft 오르미' 카테고리의 다른 글

클래스  (0) 2024.02.23
참조자료형  (0) 2024.02.22
변수  (0) 2024.02.22
Java 기초  (0) 2024.02.22
강사님 코드리뷰  (0) 2024.02.22
    BlueHarmel
    BlueHarmel
    Interested in Mathematics, Foreign Language, and "Programming"

    티스토리툴바