package edu.kh.variable;
public class Practice {
public static void main(String[] args) {
/* 기본 자료형 8가지
*
* 정수형
* byte(1), short(2), int(4)(기본형), long(8, L/l)
*
* 실수형
* float(4, F/f), double(8)
*
* 문자형
* char(2)
*
* 논리형
* boolean(1, true/false)
*
*
* [컴퓨터 값 처리 원칙]
* 같은 자료형끼리만 연산 가능, 결과도 같은 자료형
*
* [자동 형변환]
* 값의 범위가 다른 자료형끼리의 연산 시
* 범위가 작은 자료형을 큰 자료형으로 변환
* (컴파일러가 자동으로 진행)
*
* [강제 형변환]
* 특정한 자료형으로 강제 변환(바꾸고 싶은 자료형을 명시)
* 데이터 손실이 발생할 수 있다
*
* */
int iNum1 = 10;
int iNum2 = 4;
float fNum = 3.0F;
double dNum = 2.5;
char ch = 'A';
char ch1 = 'b';
// println() 자동 완성 : syso -> ctrl + spacebar -> enter
System.out.println(iNum1/iNum2); // 2
System.out.println((int)dNum); // 2
System.out.println(iNum2 * dNum); // 10.0
System.out.println((double)iNum1); // 10.0
System.out.println((double)iNum1 / iNum2); // 2.5
System.out.println((int)fNum); // 3
System.out.println((int)(iNum1 / fNum)); // 3
System.out.println(iNum1 / fNum); // 3.3333333
System.out.println((double)iNum1 / fNum); // 3.3333333333333335
System.out.println((int)ch); // 65
System.out.println(iNum1 + ch); // 75
System.out.println((char)(ch + iNum1)); // K
}
}
일반 수학과 동일한 연산 방법, 우선순위. 단, %는 나누기의 나머지 값을 구하는 연산
package edu.kh.operator.ex;
import java.util.Scanner; // Scanner import 코드
public class OperatorEx1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner 객체 생성
// 산술 연산자 : + - * / %(modulo, mod 나머지)
System.out.println("두 정수를 입력 받아 산술 연산 결과 출력하기");
System.out.print("정수 입력 1 : ");
int input1 = sc.nextInt();
System.out.print("정수 입력 2 : ");
int input2 = sc.nextInt();
// \n : 줄바꿈 (탈출문자)
System.out.printf("%d + %d = %d \n", input1, input2, input1+input2);
System.out.printf("%d - %d = %d \n", input1, input2, input1-input2);
System.out.printf("%d * %d = %d \n", input1, input2, input1*input2);
System.out.printf("%d / %d = %d \n", input1, input2, input1/input2);
System.out.printf("%d %% %d = %d \n", input1, input2, input1%input2);
// printf에서 '%' 글자를 출력하고 싶으면 "%%"를 작성!
}
}
√ 증감 연산자 : ++, --
피연산자의 값에 1을 더하거나 빼는 연산자로 위치에 따라 결과 값이 다르게 나타남
전위 연산 : 먼저 연산 후 다른 연산 실행
후위 연산 : 다른 연산 우선 실행 후 연산
√ 전위 연산자 예시
int a = 10;
int b = ++a;
System.out.println(a + ", " + b);
// 10, 11
√ 후위 연산자 예시
int a = 10;
int b = a++;
System.out.println(a + ", " + b);
// 10, 10
데이터가 같은지, 다른지 비교할 때 쓰이며 항상 결과값은 논리 값(true, false)으로 나타남.
a == b : a와 b가 같으면 true
a != b : a와 b가 다르면 true
√ == 연산자 예시
int a = 10;
int b = 10;
System.out.println(a == b);
// true
√ != 연산자 예시
double a = 1.23;
double b = 3.14;
System.out.println(a != b);
// true
두 피연산자의 값의 크기 비교
기본현 boolean과 참조형을 제외하고 나머지 자료형에 모두 사용 가능
√ 비교 연산자 예시
if(a < b) {}
int result = a > b ? a++ : b--;
for(int a = 0; a <= b; a++) {}
while(a >= b) {}
1) 표기법 (복합 기호에 항상 '=' 오른쪽)
같다 : ==
같지않다 : !=
이상 : >=
이하 : <=
초과 : >
미만 : <
2) 비교 연산의 결과는 무조건 논리형(true/false)
package edu.kh.operator.ex;
public class OperatorEx2 {
// main method 자동 완성 : "main" -> ctrl + spacebar -> enter
public static void main(String[] args) {
/* 증감 연산자 : ++, --
* - 피연산자를 1씩 증가 또는 감소시키는 연산자
*
* 전위 연산 : ++a, --a
* - 다른 연산보다 먼저 a를 증가 또는 감소시킴 (최우선)
*
* 후위 연산 : a++, a--
* - 다른 연산을 모두 수행한 후 a를 증가 또는 감소시킴 (마지막)
*
* */
// 증감 연산 확인
int num1 = 10;
int num2 = 10;
System.out.printf("[연산 전] num1 : %d / num2 : %d \n", num1, num2);
num1++; // 1 증가
num1++; // 1 증가
num1++; // 1 증가
// num1++ 는
// num1 = num1 + 1 과 같음
num2--; // 1 감소
num2--; // 1 감소
// num2-- 는
// num2 = num2 - 1 과 같음
System.out.printf("[연산 후] num1 : %d / num2 : %d \n", num1, num2);
System.out.println("--------------------");
// 전위 연산
int num3 = 5;
System.out.println("++num3 : " + (++num3)); // num3 = 6 변한 값이 그대로 변수에 들어간다.
System.out.println("--num3 + 10 : " + (--num3 + 10)); // num3 = 15
// 후위 연산
int num4 = 1;
System.out.println("num4-- : " + (num4--)); // 1
System.out.println("연산 후 num4 : " + num4); // num4 = 0
System.out.println("num4++ -3 : " + (num4++ -3)); // -3
System.out.println("연산 후 num4 : " + num4); // num4 = 1
//--------------
int a = 3;
int b = 5;
int c = a++ + --b;
// c = 3++(a) + --5(b)
// c = 3++(a) + 4(b)
// c = 7
// a = 3++ -> 4
// 최종적으로 a, b, c,는 각각 얼마인가?
// a = 4
// b = 4
// c = 7
System.out.printf("a = %d , b = %d , c = %d \n", a,b,c);
System.out.println("-------------------");
// 비교 연산자 : == != > < >= <=
// - 복합 기호에서 등호(=)는 항상 오른쪽
// - 비교 연산의 결과는 항상 논리형(true/false)
int num5 = 100;
int num6 = 200;
System.out.println(num5 == num6); // false
System.out.println(num5 != num6); // true
System.out.println(num5 > num6); // false
System.out.println(num5 < num6); // true
System.out.println(num5 >= num6-num5); // true
System.out.println((num6 <= num5+num5) == false); // false
// 짝수 검사 = 2의 배수인가?
System.out.println(4 % 2 == 0); // true
System.out.println(5 % 2 == 0); // false
System.out.println(6 % 2 == 0); // true
System.out.println(7 % 2 == 0); // false
System.out.println(8 % 2 != 1); // true
//홀수 검사
System.out.println(4 % 2 == 1); // false
System.out.println(5 % 2 == 1); // true
System.out.println(6 % 2 != 0); // false
System.out.println(7 % 2 != 0); // true
System.out.println("463984는 3의 배수인가? : " + (463984 % 3 == 0)); // false
System.out.println("463984는 4의 배수인가? : " + (463984 % 4 == 0)); // true
}
}
논리 값 두 개를 비교하는 연산자
남성 이면서 안경 쓰신분 남자 && 안경
남성 또는 안경 쓰신분 남자 || 안경
&(앰퍼센트)
&& : 두 피연산자가 모두 true일 때 true 반환 (AND 연산자)
논리값 && 논리값
T && T = T 모두 true 일 때만 true
|(버티칼바)
|| : 두 피연산자 중 하나만 true여도 true 반환 (OR 연산자)
논리값 || 논리값
F || F = F 모두 false 일 때만 false
√ 논리 부정 연산자 : !
논리 값을 부정하여 반대 값으로 변경
제어문을 활용할 때 많이 쓰임
√ 논리 부정 연산자 예시
boolean bool1 = true;
boolean bool2 = !bool1;
System.out.println(bool2);
// false
√ 단항 연산자
!true == false
!false == true
package edu.kh.operator.ex;
public class OperatorEx3 {
public static void main(String[] args) {
// 논리 연산자 : &&(AND), ||(OR)
// &&(AND) 연산자 : 둘 다 true이면 true, 나머진 false
// ~와, 그리고(이고), (이)면서, 부터, 까지, 사이
// 정수가 100 이상이면서 짝수인가?
int num1 = 100;
boolean result1 = (num1>=100) && (num1%2==0);
System.out.println("100 이상이면서 짝수인가? : " + result1);
// 정수가 50 이하이고 3의 배수인가?
int num2 = 36;
boolean result2 = (num2<=50) && (num2%3==0);
System.out.println("50 이하이고 3의 배수인가? : " + result2);
// 정수가 1부터 100 사이의 숫자인가?
int num3 = 99;
boolean result3 = (num3>=1) && (num3<=100);
System.out.println("1부터 100 사이의 숫자인가? : " + result3);
// ||(OR) 연산자 : 둘 다 false이면 false, 나머진 true
// 또는, ~(이)거나
// 정수가 10을 초과하거나 홀수인가?
int num4 = 8;
boolean result4 = (num4 > 10) || (num4%2!=0);
System.out.println("10을 초과하거나 홀수인가? : " + result4);
// 정수는 0부터 50 사이 숫자 또는 음수인가?
int num5 = 49;
// boolean result5 = (num5>=0 && num5<=50) || num5<0;
// 4 1 2 1 3 1
boolean result5 = num5<=50;
System.out.println("0부터 50 사이 숫자 또는 음수인가? : " + result5);
// 논리 부정 연산자 : ! (NOT)
// - 논리 값을 반대로 바꾸는 연산자
// 11은 짝수가 아니다
System.out.println("11은 짝수가 아니다 : " + !(11%2==0));
System.out.println(true || false && !false);
}
}
다른 연산자와 대입 연산자가 결합한 것으로
자기 자신과 연산 후 연산 결과를 자기 자신에게 누적 대입
package edu.kh.operator.ex;
public class OperatorEx5 {
public static void main(String[] args) {
// 복합 대입 연산자 : += -= *= /= %=
// - 기존 변수에 저장된 값과 새로 대입되는 값의 산술 연산 결과를 대입
// - +=(누적) -=(차감)
int a = 10;
a++; // a = a + 1
System.out.println("a를 1 증가 : " + a); // 11
a += 4; // a = a + 4
System.out.println("a를 4 증가 : " + a); // 15
a -= 10; // a = a - 10
System.out.println("a를 10 감소 : " + a); // 5
a *= 3; // a = a * 3
System.out.println("a를 3배 증가 : " + a); // 15
a /= 6; // a = a / 6
System.out.println("a를 6으로 나눴을 때 몫 : " + a); // 2
a %= 2; // a = a % 2
System.out.println("a를 2로 나눴을 때 나머지 : " + a); // 0
}
}
비교 / 논리 / 논리부정
-> true / false 일 때
A B 의 결과를 나타내고 싶음
조건식 ? 식1 : 식2;
조건식의 결과 값에 따라 연산을 처리하는 방식으로 결과 값이 참일 경우 식1, 거짓일 경우 식2 수행 삼항 연산자 안에 삼항 연산자를 중첩하여 쓰는 것도 가능
√ 삼항 연산자 예시
int result1 = a > b ? a++ : b--;
int result2 = a < b ? a++ : (b ==0 ? a-- : b++);
package edu.kh.operator.ex;
import java.util.Scanner;
public class OperatorEx4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("[홀짝 검사기]");
System.out.print("정수 하나를 입력해주세요 : ");
int input = sc.nextInt();
// 삼항 연산자
// 조건식 ? true인 경우 : false인 경우
// Math.abs(숫자) -> 절대값
String result = Math.abs(input)%2==1 ? "홀수입니다." : input==0 ? "0입니다." : "짝수입니다.";
System.out.println(result);
}
}