728x90
연산자(Operator)
- 수학 연산자 > 프로그래밍 연산자
- 피연산자를 대상으로 미리 정해진 연산(행동)을 한 후에, 연산(행동)의 결과를 반환하는 요소
- 주로 기호를 많이 사용 + 영단어도 많이 사용
1. 문장, Statement
- 1개 이상의 표현식이 모여서 문장을 만든다.
- int sum = 10 + 20;
2. 표현식, Expression
- 문장을 구성하는 최소 단위
- int sum
- 10 + 20
- sum = 30
3. 연산자, Operator
- +
- =
4. 피연산자, Operand
- +: 10, 20
- = : sum, 30
5. 연산자 우선 순위
- 하나의 문장에 속해있는 모든 연산들은, 누가 먼저 실행해야 하는지 순서가 정해져있다.
- 1 + 2 * 3 = 7
6. 연산자 연산방향
- 하나의 문장에 속해있는 연산자들 중 우선순위가 동일하면 어느 방향(좌,우)으로 실행해야 하는지 순서가 정해져있다.
- - 1 + 2 + 3 = 6
7. 연산의 종류
7-1. 행동(목적)
7-1.a 산술 연산자
- +, -, *, /, %(mod, 나머지)
- 2항 연산자
- 피연산자를 숫자를 가진다. (정수, 실수)
- ex)
- int a = 10;
- int b = 3;
System.out.printf("%d + %d = %d\n", a, b, a+b);
System.out.printf("%d - %d = %d\n", a, b, a-b);
System.out.printf("%d * %d = %d\n", a, b, a*b);
System.out.printf("%d / %d = %d\n", a, b, a/b); // 몫
System.out.printf("%d %% %d = %d\n", a, b, a%b); //나머지,% Escape 는 %%라고 입력해야함.
- 모든 산술 연산자의 결과값 자료형은 두 피연산자의 자료형중에서 더 크기가 큰 자료형으로 반환된다.
- ex)
//int / int = int
System.out.println(10/3); //- 정수/정수 = 3
//double / int = double
System.out.println(10.0/3); //- 실수/정수 = 3.333333333
// int / double = double
System.out.println(10/3.0); //- 정수/실수 = 3.333333333
// double / double = double
System.out.println(10.0/3.0); //- 실수/실수 = 3.333333333
System.out.println();
int e = 1000000000; //10억
int f = 2000000000; //20억
//int + int = int(overflow 발생!)
System.out.println(e+f); //30억이 나와야하는데 에러가 나오지 않고 -1294967296 이라는 값이 나옴.
//(long) int + int
System.out.println((long)e + f); //e를 long으로 바꾸어 주었기 때문에 long이 되서 정상적으로 출력
e = 300000;
f = 500000;
System.out.println(e*f);
System.out.println((long)e*f);
7-1.b 비교 연산자
- >, >=, <, <=, ==(같다, equals), !=(같지않다. not equals)
- 2항 연산자
- 피연산자들의 우위(동등) 비교를 하는 연산자
- 피연산자는 숫자형을 가진다.
- 연산의 결과가 반드시 boolean이다. (true, false)
- ex)
int a = 10;
int b = 3;
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
boolean b1 = true;
boolean b2 = true;
System.out.println(b1 == b2);
System.out.println(b1 != b2);
String s1 = "홍길동";
String s2 = "홍길동";
String s3 = "아무개";
String s4 = "홍";
s4 = s4 + "길동"; //"홍" + "길동"
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s4);
System.out.println(s1==s4); //false
//*** 문자열의 비교는 ==, != 연산자를 사용하면 절대 안된다.
//*** 문자열의 비교는 equals() 메소드를 사용한다.
System.out.println();
System.out.println(s1.equals(s2)); // s1 == s2
System.out.println(s1.equals(s4)); // s1 == s4
System.out.println();
7-1.c 논리 연산자
- &&(and), ||(or), !(not)
- &(and), |(or), ^(xor, exclusive or, 베타적 논리합) : 비트 연산할 때 사용.
- 2항 연산자(&&, ||)
- 1항 연산자(!)
- 피연산자의 자료형이 boolean이다.
- 연산의 결과는 boolean이다. (true, false)
- 논리곱 (A && B = ?)
- T && T = T
- T && F = F
- F && T = F
- F && F = F
- 논리합 (A || B = ?)
- T || T = T
- T || F = T
- F || T = T
- F || F = F
- ex)
System.out.println(true && true);
System.out.println(false || false);
//! : boolean을 반대로 뒤집기
System.out.println(!true); //false
System.out.println(!false);//true
//비트 연산자(비트 단위의 연산)
System.out.println(a&b); //2
//베타적 논리합
//- 좌우가 서로 다른 true
//- 암호화
System.out.println(true ^ true); //false
System.out.println(true ^ false); //true
System.out.println(false ^ true); //true
System.out.println(false ^ false); //false
//ex2) 사용자 나이 입력 > 성인(19세 이상) O,X
// 19세 이상 ~ 60세 미만
System.out.println("나이를 입력하세요 : ");
String input2 = reader.readLine();
int age2 = Integer.parseInt(input2);
System.out.println(age2 >= 19);
//19 <= age < 60
//- 연산자 우선 순위
System.out.println((19 <= age2) && (age2 < 60));
System.out.println();
7-1.d 대입연산자
- =
- +=, -=, *=, /=, %= (복합 대입 연산자)
- LValue(변수) = RValue(변수, 상수)
- LValue와 RValue의 자료형은 동일해야 한다. > 형변환
- 대입 연산자의 연산자 순위는 가장 낮다.
- ex)
int sum = 1+2*3;
System.out.println(sum);
//복합 연산자
int n = 10;
//요구사항] n에 1을 더하시오. > n의 값에 1을 더해서 다시 n에 넣어라.
// > 누적(***)
n = n + 1;
System.out.println(n);
n += 1; // n=n+1;과 같은 의미.
System.out.println(n);
n += 5;
System.out.println(n);
n -= 1;
System.out.println(n);
n -= 2;
System.out.println(n);
n = n * 2;
System.out.println(n);
n *= 2;
System.out.println(n);
n = n / 2;
System.out.println(n);
n /= 2;
System.out.println(n);
n = n%7;
System.out.println(n);
n %= 4;
System.out.println(n);
//+, *
//-, /, %
n = n + 10;
n += 10;
n = n - 10;
n -= 10;
n = 10 + n;
n += 10;
n = 10 - n;
n -= 10; //X
7-1.e 증감 연산자
- ++, --
- 1항 연산자
- 피연산자는 숫자형을 가진다.
- 누적 연산을 한다. 기존의 값에 +1, -1을 한다.
- 피연산자의 위치가 바뀔 수 있다. > 연산자 우선 순위가 달라진다.
- ++n : 전위 배치(전치) > 연산자 우선 순위 가장 높음.(1등)
- n++ : 후위 배치(후치) > 연산자 우선 순위 가장 낮음.(꼴등)
- ex)
n = 10;
result = 0;
++n; //전위 증가 11
result = 10 + n; //21
System.out.println(result);
n = 10;
result = 0;
result = 10 + n; //20
n++; //후위증가 n=11
System.out.println(result);
7-1.f 조건 연산자
- ?:
- A ? B : C
- 3항 연산자
- A: 조건(boolean)
- B,C: 결과(상수,변수)
boolean flag = false;
String m1 = "참";
String m2 = "거짓";
// A ? B(true 이면 이게 출력) : C(false이면 이게 출력)
String m3 = flag ? m1 : m2;
System.out.println(m3);
//나이 > 성인?
Scanner scan = new Scanner(System.in);
System.out.print("나이 : ");
int age = scan.nextInt();
System.out.println(age >= 19? "통과" : "거절");
System.out.println(age % 2 == 0? "짝수" : "홀수");
8. 모든 것을 이용하여 요구사항 만들어보기
- 요구사항 : 사용자로부터 문자 1개를 입력 > 영어가 소문자인지 아닌지 검사
- 시나리오
- 1. Scanner 생성하기
- 2. 라벨 출력하기
- 3. 문자 1개를 입력받기
- 4. 입력 받은 문자가 영어 소문자인지 검사
- 5. 결과를 출력
- ex)
//화면설계
Scanner scan = new Scanner(System.in); //1
System.out.print("문자를 입력하세요 : "); //2
//System.out.println("a"); //3
//문자 1개 입력 > 왜? > 소문자인지?(a ~ z) 97 ~ 122
String input = scan.nextLine(); //a를 입력
char c = input.charAt(0); //문자열의 첫글자를 char로 뽑아낸다. // "a" > 'a'
//String > int : 불가능
//Integer.parseInt("5") -> 숫자만 가능
//검사
//System.out.println((int)c); //문자 코드값 출력
int code = (int)c;
String result = ((code >=97) && (code <= 122) ? "소문자입니다." : "소문자가 아닙니다.");
// System.out.println("입력받은 문자 'a'는 소문자입니다.");
// System.out.println("입력받은 문자 'F'는 소문자가 아닙니다.");
System.out.printf("입력받은 문자 '%c'는 %s\n", code, result);
728x90
'자바' 카테고리의 다른 글
JAVA STEP 11. Method (0) | 2023.02.07 |
---|---|
JAVA STEP 10. 자바 예제모음 (0) | 2023.02.06 |
JAVA STEP 8. Casting (0) | 2023.02.06 |
JAVA STEP 7. 카페 무인전산 시스템 만들기(기초) (0) | 2023.02.05 |
JAVA STEP 6. INPUT (0) | 2023.02.03 |