프로그래밍 언어 학습 순서
1. 변수(자료형)
2. 연산자
3. 제어문
4. 객체지향관련
연산자 (Operator)
프로그램의 명령어는 변수와 연산자로 구성된다.
1) 산술연산자 : +, -, *, /, %
자바스크립트 : 5 / 2 = 2.5 (실수, 자동 형변환)
자바 : 5 / 2 = 2(정수)
정수 연산의 결과는 무조건 정수
나눗셈의 경우 몫만 취한다.
실수 연산 시 % 연산자는 사용하지 않는다.
한 가지 자료형으로 연산이 수행될 경우 자료형이 변하는 경우는 없다.(형변환X)
import java.util.Scanner; //라이브러리 사용
public class SimpleCalculator {
public static void main(String[] args) {
// 2수 입력 받아서 덧셈 후 결과 출력
int num1, num2, result;
// 입력장치(Scanner) 인스턴스 생성
Scanner scanner = new Scanner(System.in);
// new: heap 영역에 인스턴스를 생성하는 명령어
// 프로그램 이름(title) 출력이 필요
System.out.println("간단한 덧셈 계산기");
System.out.println("================");
// 입력처리
System.out.print("Number1 : "); // 안내문구
num1 = scanner.nextInt();
System.out.print("Number2 : "); // 안내문구
num2 = scanner.nextInt();
// 연산 처리 : 덧셈
result = num1 + num2;
// 결과 출력
System.out.println("덧셈 결과 : " + result);
// 종료문구
System.out.println("프로그램을 종료합니다.");
}
}
p58
연산식에서 자동 형변환
btye + byte = int result 연산 후 형변환
byte + short = int result 형변환 후 연산
byte와 short 는 연산시 자동으로 int로 형변환되어 결과값이 byte와 short로 저장되지 못하여 에러가 발생한다.
결과값을 byte와 short로 다시 형변환을 해주어서 넣어주거나, int로 결과값을 저장해야 한다.
int * int의 경우 결과값이 커지기 때문에 long으로 결과값을 받아주어야 한다.
byte x = 10;
byte y = 20;
// byte res = x + y; 컴파일 에러
byte res = (byte) (x + y);
int e = x + y;
short x2 = 10;
short y2 = 30;
short res2 = (short)(x2 + y2);
int n1 = 5;
float f1 = 2.0f;
float resf = n1 / f1;
System.out.println(resf);
오버플로어(Overflow)와 언더플로어(Underflow) p 83
오버플로어란 타입이 허용하는 최대값을 벗어나는 것을 말한다. 99 + 1 = 00
언더플로어란 타입이 허용하는 최소값을 벗어나는 것을 말한다. -99 + (-1) = 00
3) 증감 연산자 : ++, -- (자바스크립트와 동일) 1씩만 가능
x ++;
x = x + 1;
4) 비교연산자 : ==, !=, >, >=, <, <= 자바스트립트와 동일(===, !== 없음, 자료형이 없기 때문에 자바스크립트에만 존재)
문자열 비교는 equals 메소드를 사용.
문자열1.equals(문자열2); -> true/false
String s1 = "abcd";
String s2 = "abcd";
s1.equals("abcd");
"abcd".equals(s1);
s1.equals(s2);
s2.equals(s1);
5) 논리연산자 : &&, ||, !(Not), ^(XOR, 베타적 논리합) 자바스크립트와 동일
베타적논리합 : 서로 다른 경우에만 true, 서로 같은 경우에는 false, 별로 사용하지 않는다.
비교 연산자로 작성된 연산식을 결합할 때 사용
논리곱 : AND && 두 연산식이 모두 true일 때만 전체가 true
논리합 : OR || 두 연산식이 모두 false일 때만 전체가 false
6) 조건연산자 : (condition) ? A : B; 자바스크립트와 동일
true면 A, false면 B 실행
기계제어할 때 사용 또는 서브넷마스크 Masking 때 사용
7) 비트 연산자 : 비트(bit) 단위로 연산을 수행
비트단위 논리연산자 - &, |, ^, !
비트 이동 연산자(shift) - <<, >>, >>>
<< : * 2와 같은 효과가 나오는 연산자
>> : / 2와 같은 효과가 나오는 연산자
>>> : 첫번째 비트의 값이 0이면 이동 후 0을 채우고, 1이면 이동 후 0을 채움.
public class BitOpClass {
public static void main(String[] args) {
int a = 5; // 2진수 0101
int b = 3; // 2진수 0011
System.out.println("a & b : " + (a & b)); // 0001 비트 곱, 논리곱과 같음
System.out.println("a | b : " + (a | b)); // 0111 4+2+1
System.out.println("a ^ b : " + (a ^ b)); // 0110 4+2
// bit shift 연산
int c = 1;
int d = 1;
int e = c << d;
System.out.println("d << " + d + " => e : " + e);
d = 2;
e = c << d;
System.out.println("d << " + d + " => e : " + e);
c = 32;
d = 1;
e = c << d;
System.out.println("d << " + d + " => e : " + e);
c = -8;
d = 1;
e = c >> d;
System.out.println(c + " >> " + d + " => e : " + e);
// >>>연산
c = -8;
d = 1;
e = c >>> d;
System.out.println(c + " >>> " + d + " => e : " + e);
}
}
연습문제
윤년 계산 프로그램 자바로 작성해보기!
import java.util.Scanner;
public class LeapYear {
public static void main(String[] args) {
int year; // 연도 저장변수
boolean res; // 윤년 판단 정보 저장 변수
String outString; // 결과 문자열 저장 변수
// 입력 처리용 객체
Scanner scanner = new Scanner(System.in);
// 타이틀 출력
System.out.println("☆윤년 계산기☆");
System.out.println("==============");
// 연도 입력
System.out.print("연도 : ");
year = scanner.nextInt();
res = ((year % 4 == 0) && (year % 100 != 0))
|| (year % 400 == 0);
outString = (res) ? "윤년입니다." : "윤년이 아닙니다.";
// 결과 출력
System.out.println(outString);
System.out.println("프로그램 종료");
}
}
'공부기록 > Java' 카테고리의 다른 글
4월 10일 (2) Java - 참조 변수, 배열 (0) | 2023.04.10 |
---|---|
4월 10일 (1) Java - 제어문 (0) | 2023.04.10 |
4월 7일 (1) Java - 인스턴스, 형 변환, Scanner (0) | 2023.04.07 |
4월 6일 (2) Java - 변수, 자료형 (0) | 2023.04.06 |
4월 6일 (1) Java - 특징, 프로그램 설치 (0) | 2023.04.06 |