JAVA 2주차

ndy·2022년 9월 13일

Java

목록 보기
2/10

3장 연산자와 연산식


연산

  • 데이터를 처리하여 결과를 산출하는 것

    연산자 : 연산에 사용되는 표시나 기호(+, -, *, /, %, =...)
    피연산자 : 연산 대상이 되는 데이터(리터럴, 변수)
    연산식 : 연산자와 피연산자를 이용하여 기술

    리터럴 : 변수에 넣는 변하지 않는 데이터를 의미

연산의 방향과 우선 순위

ex) 1 + 3 > 1 + 2	-->
	4 > 3			-->
    true (산술 > 비교)

단항 연산자

피연산자가 1개인 연산자

부호 연산자 (+, -) : boolean, char 타입을 제외한 기본 타입에 사용 가능

int num1 = +100;
int num2 = -100;
short num = 100;
short result = -num; //컴파일 에러, 변수를 부호 연산 하면 int 타입으로 산출 됨

int result = -num; //가능

증감 연산자 (++, --)

int x = 1;
int y = 1;
int result1 = ++x + 10; // ++x 먼저 수행 후 x + 10
int result2 = y++ + 10; // y + 10 먼저 수행 후 y++

비트 반전 연산자 (~) : byte, short, int, long 타입만 가능

byte num = 10;
byte result = ~num; // 컴파일 에러 (int 타입으로 산출 됨)
int result = ~num; // -11

00001010 -> 11110101
2의 보수 11110101 -> 00001010+1 -> 00001011 = -11


이항 연산자

피연산자가 2개인 연산자

산술 연산자(+, -, *, /, %) : boolean 타입만 불가능

byte num1 = 1;
byte num2 = 2;
byte result = num1 + num2; // 오류 (int 타입으로 계산 됨)

int result = num1 + num2;
int num1 = 10;
int num2 = 4;
double result = num1 / num2; // 2 (int로 계산된 결과가 저장)
char c1 = 'A' + 1; // 'B' (아래와 비교했을 때 리터럴 계산은 가능)
char c2 = 'A';
char c3 = c2 + 1; // 오류 (c2 -> 65 int형으로 계산됨)
  • 부동소수점의 오차
int apple = 1;
double pieceUnit = 0.1;
int number = 7;

double result = apple - number * pieceUnit;
// 1 - 0.7 = 0.3이지만 오차로 인해 0.2999999999...로 나옴
  • NaN과 Infinity 연산을 조심
5 / 0; // ArithmeticException 예외 발생
5 % 0; // ArithmeticException 예외 발생

5 / 0.0; // Infinity
5 % 0.0; // NaN

Infinity + 2; //Infinity
NaN + 2; // NaN

비교 연산자(==, !=, <, >, <=, >=)

  • 동등 비교 연산자 : 모든 타입 사용 가능

  • 크기 비교 연산자 : boolean 타입 제외 사용 가능

  • 문자열 비교

    • String 타입의 문자열을 비교할 때는 대소(<, <=, >, >=)연산자 사용 불가
    • 문자열 비교는 equals() 메소드를 사용

  String s1 = new String("A");
  String s2 = "A";
  String s3 = "A";
s1 == s2 -> false	// s1과 s2의 데이터 주소값이 다름
s2 == s3 -> true	// s2와 s3의 데이터 주소값이 같음

문자열 비교(==) : 데이터 주소값을 비교
equals() : 데이터 값 자체를 비교


논리 연산자(&&, ||, &, |, ^, !)


비트 연산자(&, |, ^, ~, <<, >>, >>>)

  • 비트(bit)단위로 연산 함, 0과 1이 피연산자가 됨
    • 실수 타입 float, double은 비트 연산 불가능

비트 논리 연산자 (&, |, ^, ~)

  • 피연산자가 boolean타입일 경우 -> 일반 논리 연산자
  • 피연산자가 정수 타입일 경우 -> 비트 논리 연산자

비트 이동 연산자 (<<, >>, >>>)

int result = 1 << 3; // 왼쪽으로 3칸 시프트 : 8

00000000 00000000 00000000 00000001
00000000 00000000 00000000 00001000

int result = -8 >> 3; // 오른쪽으로 3칸 시프트 : -1

11111111 11111111 11111111 11111000
11111111 11111111 11111111 11111111

int result = -8 >>> 3; // 오른쪽으로 3칸 시프트 (빈자리를 0으로 채움)

11111111 11111111 11111111 11111000
00011111 11111111 11111111 11111111


삼항 연산자(조건 연산자)

  int score = 95;
  char grade = (score > 90) ? 'A' : 'B';
  // score가 90보다 크므로 'A'

4장 코드 실행 흐름 제어

if문, for문 스킵

while문

int a = 1;
  
while (a < 10) {
    System.out.println(a + "번");
    a++;
}       
1번
2번
3번
4번
5번
6번
7번
8번
9번           

do while문

int a = 1;

do{
	System.out.println(a + "번");
    a++;
} while(a < 10);
1번
2번
3번
4번
5번
6번
7번
8번
9번           

break문

int a = 1;  

while(true){
	System.out.println(a + "번");
  	a++;
  	
  	if(a > 10)
		break;
}
1번
2번
3번
4번
5번
6번
7번
8번
9번 
10번

0개의 댓글