연산 OPERATION
- 주어진 정보를 통해 수나 식을 일정한 규칙에 따라 어떤 값이나 결과를 구하는 과정
- 연산자(연산 기호)와 피연산자(변수, 데이터) 로 구성
연산종류
- 대입 , 산술, 증감, 비교, 논리, 비트, 삼항, 문자열 연산
대입(할당)연산
- 연산자 : = , +=, -=, *=, /=, %=
- 변수 = 값
- 연산자 기준으로 오른쪽 변수나 값을 왼쪽 변수에 대입
- 중요한것은 오른쪽의 경우 다양한 연산식, 메서드등이 올수 있으며 어떠한 경우라도 값이거나 주소임
- 왼쪽변수명과 오른쪽변수명이 같은 경우 먼저 변수값을 가져와서 동일한변수에 대입
package chapter04;
public class OpEx1 {
public static void main(String[] args) {
/*
int a = 10;
10 = a; // 에러 1
a + 1 = 10; // 에러 2
10 = 1; // 에러 3
a = a + 10; // 정상
*/
int number1 = 10;
System.out.println("number1 = 10 -> "+number1); // 10출력
number1 = number1;
System.out.println("number1 = 10 -> "+number1); // 10출력
int number2 = number1;
System.out.printf("(number1, number2) -> (%s,%s)", number1, number2); // (10,10)출력
}
}
산술연산
- 연산자 : +, -, *, /, %
- ' % ' : 나머지 연산자
- 변수 = 변수 + 값
- 변수 += 값 (단, 변수 == 변수)
- 연산결과가 범위를 벗어나면 에러발생
- 자료형이 다른 연산은 큰자료형변환 후 연산
- 정수 / 정수 => 정수
- (double,float)정수 / (double, float)정수 => 실수 , 둘중 하나를 실수형으로 형변환
- (int)문자 + (int)문자 가능
- 문자열 + 문자열 가능
- 음수 표현시 ' - ` 사용
package chapter04;
public class OpEx1 {
public static void main(String[] args) {
int number1 = 10;
System.out.println("number1 = 10 -> "+number1); // 10출력
int number2 = number1;
System.out.printf("(number1, number2) -> (%s,%s)", number1, number2); // (10,10)출력
number1 = number1 + 10;
number1 += 10; // 더하고 대입
System.out.println("number1 += 10 -> "+number1);
number1 = number1 - 10;
number1 -= 10; // 빼고 대입
System.out.println("number1 -= 10 -> "+number1);
number1 = number1 * 2;
number1 *= 2; // 곱하고 대입
System.out.println("number1 *= 2 -> "+number1);
number1 = number1 / 2;
number1 /= 2; // 나누고 대입
System.out.println("number1 /= 2 -> "+number1);
number1 = number1 % 3 ;
number1 %= 3 ; // 나머지 대입
System.out.println("number1 %= 3 -> "+number1);
}
}
package chapter04;
public class OpEx2 {
public static void main(String[] args) {
// 결과값이 실수로 연산되게하는 방법
int a = 10;
int b = 4;
System.out.println("10 / 4 = " + a / b);
System.out.println("10 / 4 = " + (double)a / b);
// char 연산
char c1 = 'a';
char c2 = 'b';
int c3 = c1 + c2; // 자동형변환
int c4 = (int)c1 + (int)c2; // 강제형변환
System.out.println("c3 = " + c3);
System.out.println("c4 = " + c4);
// 문자열 덧셈
String s1 = "Hello";
String s2 = "World!!";
String s3 = s1 + " " + s2;
System.out.println(s3);
// 음수 사용
int c = -a;
System.out.println("c = " + c);
}
}
증감연산
- 연산자 : ++, --
- 변수의 값을 1 증가시키거나 감소 시킴
- 전위연산, 후위연산으로 나뉘며 대입되는 변수에 값이 다르므로 주의
package chapter04;
public class OpEx3 {
public static void main(String[] args) {
int a = 10;
int b;
a = a + 1;
a += 1;
++a; // 전위연산
a--; // 후위연산
System.out.println(a);
// 전위,후위 연산 차이
a = 10;
b = a++;
System.out.printf("(a,b)= (%s,%s)", a,b);
System.out.println();
b = ++a;
System.out.printf("(a,b)= (%s,%s)", a,b);
}
}
비교연산
- 두항의 관계를 나타내는 연산자
- 연산자 : '>, >=, <, <=, ==, !='
- = 대입연사자, == 동등비교연산자
- 문자열의 값동등비교는 String 객체의 equals() 메소드 사용
- 연산결과 : 논리형 boolean => true, false
package chapter04;
public class OpEx4 {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println(a > b); // true
System.out.println(a >= b); // true
System.out.println(a < b); // false
System.out.println(a <= b); // false
System.out.println(a == b); // false
System.out.println(a != b); // true
boolean c = a == b; // c 변수에 결과값 대입
System.out.println("c = "+c);
boolean d = c == false; // d 변수에 결과값 대입
System.out.println("d = "+d);
String myName = "bar";
String yourName = "bar";
System.out.println(myName == yourName);
}
}
package chapter04;
import java.util.Scanner;
public class OpEx4_1 {
public static void main(String[] args) {
// String 값 비교
// 리터럴
String myName = "bar";
String yourName = "bar";
System.out.println(myName == yourName); // true
System.out.println(myName.equals(yourName)); // true
// 생성자
myName = new String("foo");
yourName = new String("foo");
System.out.println(myName == yourName); // false
System.out.println(myName.equals(yourName)); // true
// hashCode() : 값이 같으면 주소를 같은 해시값으로 생성
System.out.println(myName.hashCode() + "/" + yourName.hashCode()); // 같다
// System.identityHashCode(Object o) : 실제 생성된 주소를 해시값으로 생성
System.out.println(System.identityHashCode(myName)); // 다르다
System.out.println(System.identityHashCode(yourName)); // 다르다
// 외부 입력
System.out.println("name input > ");
Scanner scan = new Scanner(System.in);
myName = scan.next();
yourName = scan.next();
System.out.println(myName == yourName); // false
System.out.println(myName.equals(yourName)); // true
System.out.println(myName.hashCode() + "/" + yourName.hashCode());
System.out.println(System.identityHashCode(myName));
System.out.println(System.identityHashCode(yourName));
}
}
논리연산
- 수학의 논리연산과 동일
- 연산자 : { AND : && , OR: ||, NOT : !
- 피연산자, 결과 모두 boolean true, false 자료
package chapter04;
public class OpEx5 {
public static void main(String[] args) {
int a = 10;
int b = 5;
// AND 연산
System.out.println(a > b && a == 10); // true
System.out.println(a > b && a == b); // false
// OR 연산
System.out.println(a > b || a == b); // true
System.out.println(a < b || a == b); // false
// XOR 연산
System.out.println(a > b ^ a == 10); // false
System.out.println(a > b ^ a == b); // true
// NOT 연산
System.out.println(!(a > b)); // false
System.out.println(!(a < b)); // true
}
}
package chapter04;
public class OpEx5_3 {
public static void main(String[] args) {
int a = 10;
int b = 0;
// && 연산 - 첫항이 flase이면 다음항 연산 안함
System.out.println(b > 0 && (a / b > 0));
// || 연산 - 첫항이 true이면 다음항 연산 안함
System.out.println(b == 0 || (a / b > 0));
}
}
비트연산
- 비트단위(0,1)로 연산
- 연산자 : { AND : & , OR: |, NOT : ~, 비트이동 : >>, <<
- 2진수 출력 메서드 : Integer.toBinaryString()
package chapter04;
public class OpEx6_1 {
public static void main(String[] args) {
System.out.println("2:"+Integer.toBinaryString(2)); // 10진수 2를 2진수로 변환
System.out.println("3:"+Integer.toBinaryString(3)); // 10진수 3을 2진수로 변환
// 비트 논리연산
System.out.println("2&3 : "+(2&3));
System.out.println("2|3 : "+(2|3));
System.out.println("2^3 : "+(2^3)); // XOR
System.out.println("~3 : "+~3);
// << 연산
System.out.println(3 << 2);
System.out.println("3의 이진수 : "+Integer.toBinaryString(3));
System.out.println("12의 이진수 : "+Integer.toBinaryString(12));
// >> 연산
System.out.println(8 >> 2);
System.out.println("8의 이진수 : "+Integer.toBinaryString(8));
System.out.println("2의 이진수 : "+Integer.toBinaryString(2));
}
}
삼항연산
- 3개의 항으로 이루어진 연산
- 특정 조건의 true, false에 따라 조건 연산 => 조건문으로 변경 가능
- 조건식 ? 값1(연산식) : 값2(연산식)
- 조건식 true => 값1, false => 값2
package chapter04;
public class OpEx7 {
public static void main(String[] args) {
int score = 80;
String pass = score >= 60 ? "합격 " : "불합격";
System.out.println(pass);
}
}
문자열 연산
- 연산자 : +
- 숫자 + 문자열 => 문자열로 자동 형변환
package chapter04;
public class OpEx8 {
public static void main(String[] args) {
String name = "홍길동";
System.out.println("안녕하세요 " + name + " 입니다.");
int height = 180;
System.out.println("저의 키는 " + height + "cm입니다.");
// String weight = 75.5; // 에러발생 (문자자료형 변수에는 숫자 대입 못함)
String weight = 75.5 + "";
System.out.println("제 몸무게는 " + weight + "kg입니다.");
int ageInt = 30; // 정수
String ageStr = "30"; // 문자열
}
}
연산자 우선순위
- 최우선 순위 : ()
- 우선적인 연산식에 () 처리
package chapter04;
public class OpEx9 {
public static void main(String[] args) {
int a = 5;
int b = 4;
int c = 3;
// * 연산이 먼저 실행됨
System.out.println(a + b * c);
// 괄호로 묶어 우선순위를 높여줌
System.out.println((a + b) * c);
}
}
깃 허브 주소 : https://github.com/bjw5035/Academy_Study
'Programing > JAVA' 카테고리의 다른 글
제어문 - 반복문 LOOP (1) | 2022.02.23 |
---|---|
제어문 - 조건문 CONDITIONAL (1) | 2022.02.21 |
변수 (0) | 2022.02.21 |
변수란? (0) | 2022.02.17 |
변수 (0) | 2021.04.01 |