[JAVA] 여러가지 연산자

XXXX·2024년 1월 5일
0
post-thumbnail

항과 연산자

  • 단항 연산자: 항이 1개   ex) num++
  • 이항 연산자: 항이 2개   ex) 1+1
  • 삼항 연산자: 항이 3개   ex) (3>1) ? 1:0
  • 대입 연산자: 우측의 데이터를 좌측의 변수에 대입   ex) int num = 100;
  • 부호 연산자: 부호를 나타내는 연산자   ex) +10, -10
  • 산술 연산자: 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
  • 증가/감소 연산자: 값을 1만큼 늘리거나 (++), 1만큼 줄임 (--)   ex) num++, ++num, num--, --num
  • 관계 연산자: 두 항의 값 크기 비교, 결과 값은 비교 결과에 따라 true 또는 false   ex) >, <, >=, <=, ==, !=
  • 논리 연산자: 논리식에 대해 참 거짓 판단, 결과 값은 판단 결과에 따라 true 또는 false   ex) &&, ||, !
  • 복합 대입 연산자: 대입 연산자와 다른 연산자의 조합   ex) num1 += num2


// Java 프로그래밍 - 여러가지 연산자_1

public class Main {
    public static void main(String[] args) {

//      1. 대입 연산, 부호 연산자
        int num = 100;
        num = -10;
        num = 10;
        num = +10;


//      2. 산술 연산자, 증가/감소 연산자
        System.out.println("== 산술 연산자, 증가/감소 연산자 ==");
        int numX = 10;
        int numY = 3;
        int result = 0;
        result = numX + numY;
        result = numX - numY;
        result = numX * numY;
        result = numX / numY;
        result = numX % numY;
        System.out.println("result = " + result);

        int numZ = 1;
        System.out.println(numZ++); // 출력 후 값 증가
        System.out.println(numZ);

        numZ = 1;
        System.out.println(++numZ); // 증가 후 출력
        System.out.println(numZ);

        numZ = 1;
        System.out.println(numZ--); // 출력 후 값 감소
        System.out.println(numZ);

        numZ = 1;
        System.out.println(--numZ); // 감소 후 출력
        System.out.println(numZ);



//      3. 관계 연산자
        System.out.println("== 관계 연산자 ==");
        int numA = 10;
        int numB = 9;

        System.out.println(numA > numB);
        System.out.println(numA < numB);
        System.out.println(numA == numB);
        System.out.println(numA != numB);


//      4. 논리 연산자
        System.out.println("== 논리 연산자 ==");
        System.out.println((10 > 9) && (1 == 0));
        System.out.println((10 > 9) || (1 == 0));


//      5. 복합 대입 연산자
        System.out.println("== 복합 대입 연산자 ==");
        int num1 = 10;
        int num2 = 5;
        num1 += num2;
//        num1 = num1 + num2;
        System.out.println("num1 = " + num1);
        num1 -= num2;
        num1 *= num2;


//      6. 삼항 연산자
        System.out.println("== 삼항 연산자 ==");
        int a = 100;
        String aResult = (a == 100) ? "yes":"no"; // 조건문이 참이면 왼쪽, 거짓이면 오른쪽 출력
        System.out.println("aResult = " + aResult);

    }

}


2진법

  • 컴퓨터에서 데이터 표현에 사용
  • 2를 기반으로 하는 숫자체계


2의 보수

  • 2의 제곱수에서 빼서 얻은 이진수
  • ex) 2진수 3의 2의 보수: 11 → 01
    과정: 100(2) - 11(2) = 01(2)
    빠르게 구하는 과정: ex) 101 → 010(부호 반전) → 011(1을 더해줌)

비트 연산자

  • 비트 단위로 연산
  • AND 연산자(&) : 두 개의 비트 값이 모두 1인 경우에만 결과 1
    ex) 5(0101) & 3(0011) -> 1(0001)
  • OR 연산자(|) : 두 개의 비트 값 중 하나라도 1이면 결과 1
    ex) 5(0101) | 3(0011) -> 7(0111)
  • XOR 연산자(^) : 두 개의 비트 값이 같으면 0, 다르면 1
    ex) 5(0101) ^ 3(0011) -> 6(0110)
  • 반전 연산자(~) : 비트 값이 0이면 1로, 1이면 0으로 반전
    ex) ~5(0101) -> -6(1010 -> 0101 -> 0110)

비트 이동 연산자

  • << 연산자 : 비트를 왼쪽으로 이동
  • >> 연산자 : 비트를 오른쪽으로 이동 (기존 부호 비트 연산자 그대로 따라온다.)
  • >>> 연산자 : 비트를 오른쪽으로 이동 (부호비트 상관 없이 0으로 채움)


// Java 프로그래밍 - 여러가지 연산자_2

import java.sql.SQLOutput;

public class Main {
    public static void main(String[] args) {

//      1. 비트 논리 연산자
        System.out.println("== 비트 논리 연산자 ==");
//      1-1. AND 연산자 (&)
        System.out.println("== & ==");
        int num1 = 5;
        int num2 = 3;
        int result = 0;

        result = num1 & num2;
        System.out.println("result = " + result); // num1과 num2를 '&'로 연산한 결과 값.
        System.out.println(Integer.toBinaryString(num1)); // num1(5)를 이진수로 표현.
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1))); // parseInt : String 타입을 int 타입으로 전환
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));

        // "println"은 라인 넘김, "printf"는 우리가 포맷을 만들어서, 그 포맷에 맞게 출력할 수 있도록 해주는 명령어
        // "%04" : 4개 자리 수를 출력 함. 4자리 수에 못 미치는 경우에는 앞 자리수를 0으로 채워줌
        // "d" : 정수형 데이터를 받을 수 있는 서식문자

//      1-2. OR 연산자 (|)
        System.out.println("== | ==");

        result = num1 | num2;
        System.out.println("result = " + result);
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));


//      1-3. XOR 연산자 (^)
        System.out.println("== XOR ==");
        result = num1 ^ num2;
        System.out.println("result = " + result);
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));



//      1-4. 반전 연산자 (~)
        System.out.println("== ~ ==");
        num1 = 5;

        result = ~num1;
        System.out.println("result = " + result);
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
        System.out.printf("%s\n", Integer.toBinaryString(result)); // 반전!



//      2. 비트 이동 연산자
        System.out.println("== 비트 이동 연산자 ==");
//      2-1. << 연산자
        int numA = 3;
        result = numA << 1;

        System.out.println("result = " + result);
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));


//      2-2. >> 연산자
        result = numA >> 1;
        System.out.println("result = " + result);
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
        System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));

//      2-3. >>> 연산자
        numA = -5;
        result = numA >> 1;
        System.out.printf("%s\n", Integer.toHexString(numA));
        System.out.printf("%s\n", Integer.toBinaryString(result));

        result = numA >>> 1;
        System.out.printf("%s\n", Integer.toHexString(numA));
        System.out.printf("%s\n", Integer.toBinaryString(result));


    }

}

0개의 댓글