[풀스택과정] JAVA 4장 연산

개발자지니!
|2023. 1. 10. 18:03
728x90
728x90

* 이 글은 제가 공부하기 위해 최대한 사실에 입각해 내용을 적으려고 하지만 일부 내용들이 정확하지 않을 수 있습니다.

   혹시나 잘못된 부분이 있으면 너그럽게 이해해주시고 피드백 부탁드려요!

 


2023.01.09 - [공부/풀스택 과정] - [풀스택과정] JAVA 1장 자바기초 2장 자바설치 3장 변수와 자료형

 

[풀스택과정] JAVA 1장 자바기초 2장 자바설치 3장 변수와 자료형

버젼을 표시 17.0.5 메이저. 마이너. 업데이트 버전 업데이트 버전은 바뀌어도 크게 상관없음 LTS : long term service 언제까지 지원하는지 표시 8,11,17 만 지원 나머지는 LTS가 아님 윈도우+R : 실행 cmd, ca

cloudjini.tistory.com




byte : 문자를 표현하기 위한 최소단위

3.4 상수와 리터럴

상수 : 항상 같은 수
리터럴 : 실제 입력된 값
제어문자 : escape문자 

\n : 개행 (unix > linux, mac, android)
\r\n : 개행(windows)

책과 예제에 따라 결과값이 달라보일 수 있지만
\t 기준을 맞추는 것은 어려움

3.5 변수의 범위(scope)

괄호 -> 소괄호 () : 수식의 우선순위, 메서드 파라미터(String[] args)
중괄호 {} 블럭 : scope(영역)
대괄호 [] : 배열

조건문 블럭 강제할 때 스코프를 배우는 것이....

블럭은 어디 위치에 올수 있음
블럭은 종결의미가 있기 때문에 세미콜론도 필요가 없음

3.6 형변환(casting)
자동(묵시적) 형변환
강제(명시적) 형변환

byte < short < int < long < float < double

Chapter 4. 연산

연산의 종류 
대입연산 산술연산 증감연산 비교연산 논리연산 비트연산 삼항연산 문자열연산

산술 > 비교 > 논리 > 대입  (우선순위)
산술먼저 그다음 비교 등
항 갯수에 따른 연산 우선순위
(단항연산 이항연산 삼항연산)
항의 개수가 적을수록 우선순위가 빠름
우선순위를 모르겠으면 괄호를 만들면 됨
단 괄호가 많아지면 코드가 더러워짐


★산술형 상승 문제 나옴
★이진법 계산

4.1 대입연산
대입은 = 기준으로 오른쪽 값을 왼쪽의 변수에 대입한다.

4.2 산술연산
+, -, *, /, %
자바에서는 정수와 정수의 연산 결과는 항상 정수

package chapter04;

	public class OpEx1 {
		public static void main(String[] args) {
		String str = "abcd";
		str += "가나다라";
		System.out.println(str);

		int number1 = 10;
		System.out.println("number1 = 10 -> "+number1); // 10 출력
		number1 += 10; // 더하고 대입
		// number1 = number1 + 10;
		// 결과값은 똑같으나 형변환때 문제가 생길수 있음
		// number1 = 10 + number1 : 문자열 연산

		System.out.println("number1 += 10 -> "+number1); // 20 출력
		number1 -= 10; // 빼고 대입
		System.out.println("number1 -= 10 -> "+number1); // 10 출력
		number1 *= 2; // 곱하고 대입
		System.out.println("number1 *= 2 -> "+number1); // 20 출력
		number1 /= 2; // 나누고 대입
		System.out.println("number1 /= 2 -> "+number1); // 10 출력
		number1 %= 3; // 나머지 대입
		System.out.println("number1 %= 3 -> "+number1); // 1 출력
        
// 특히 이항연산의 특징
// 1. 두 항의 데이터값을 일치시켜야함(무조건)
// 2. 산술형 상승(upper casting?)(byte, short, char는 int로 변환됨)
// int i = 10 + 10L; 변수를 바꾸던지, 강제 형변환
// int i = (int)(10 + 10L); (해결책)
// char c = 'A';
// c = (char)(c + 1);
// c += 1; 복합대입은 산술형 상승을 안함. 단순히 원래 데이터에 1만 추가
// i = 10 + (int)10L;
// i = 1000000 * 1000000;
// System.out.println(i); 결과값이 나오지만 문법 오류는 없지만 논리적오류가 생김

		int a = 10;
		int b = 4;
		System.out.println(+(double)a/b);
		}
	}



package chapter04;

	public class OpEx2_1 {
		public static void main(String[] args) {
			int a = 5;

			System.out.println("+a = " + +a);
			System.out.println("-a = " + -a); 

			a = -5;

		    System.out.println("+a = " + +a);
			System.out.println("-a = " + -a);
		}
	}



4.3 증감연산
전위연산 : ++변수명, 먼저 변수에 1 증가 시킨 후 다른 연산을 실행
후위연산 : 변수명++, 다른 연산 실행 후 변수에 1 증가

package chapter04;

	public class OpEx3 {
		public static void main(String[] args) {

			a = 10;

			a = a++ + ++a;

			a = 10;
			System.out.println(a++); // 10 > 10++
			// a = 11이 되어있는 상태
			System.out.println(a); // 11
			System.out.println(++a);


		}
	}



4.4 비교연산
대소비교 >, <, >=, <=

등가비교 ==, !=
불린값도 비교가 됨. 참조 자료형도 가능.

package chapter04;

	public class OpEx4 {
		public static void main(String[] args) {
			int a = 10;
			int b = 5;
			
            // ctrl + alt + 위아래화살표(행 복제)
			// alt + 위아래화살표(행 이동)
			// ctrl + d(행 삭제)

			System.out.println(a > b);
			// > : A > B A greater than B
			System.out.println(a >= b);
			// >= : A >= B A greater than equals B
			System.out.println(a < b);
			// < : A < B A lesser than B
			System.out.println(a <= b);
			// <= : A <= B A lesser than equals B
			System.out.println(a == b);
			// == : A == B A equals B
			System.out.println(a != b);
			// != : A != B A not equals B
			}
	}


4.5 논리연산
논리곱(AND), 논리합(OR), 배타적 논리합(XOR), 논리부정(NOT)

교집합(논리곱)은 합집합(논리합)보다 빠르다(우선순위)

AND는 거짓을 찾는 과정, OR는 참을 찾는 과정
하나만이라도 찾으면 정답이 나옴

/* 
 * 진리표
 * A B & |
 * 0 0 0 0
 * 0 1 0 1
 * 1 0 0 1
 * 1 1 1 1
 */

package chapter04;

	public class OpEx5_1 {
		public static void main(String[] args) {
			// System.out.println(3.6/0);
			//
			// int i = 1;
			// boolean b = i == 1 || 10 / 0 == 1; // 참을 찾았기 때문에 뒤에가 오류여도 실행
			// System.out.println(b);
			System.out.println(true && false);
			System.out.println(true & false);
			// 한개를 쓰던 두개를 쓰던 되기는 하지만 한개만 쓴거는 비트곱연산자

			// 비트 연산자(정수로만 됨)
			System.out.println(10 & 3);
			System.out.println(10 | 3);
			// 1010 : 10
			//   11 : 3

			// 0010 : 2 &
			// 1011 : 11 |
			// 1001 : 9

		}
	}
package chapter04;

	public class OpEx5_2 {
		public static void main(String[] args) {

			int a = 10;
			int b = 5;

			// & 연산
			System.out.println(a == b & test());

			// && 연산
			System.out.println(a == b && test());

			System.out.println(Integer.MAX_VALUE);
			System.out.println(Integer.MAX_VALUE + 1); // 음수 최젓값
			System.out.println(Integer.MIN_VALUE); // 위랑 동일
			System.out.println(Integer.MIN_VALUE - 1); // 양수 최댓값

			System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
			//맨 앞자리가 0이어서 생략되어 있음
			System.out.println(0 + Integer.toBinaryString(Integer.MAX_VALUE));
			System.out.println(Integer.toBinaryString(Integer.MIN_VALUE));

			System.out.println(-5 / 2);
			System.out.println(5 >> 1);
			System.out.println(-5 >> 1);
		}

		public static boolean test() {
			System.out.println("test()메서드 실행됨");
			return true;
		}
		// 클래스 블록 아래 메서드는 위아래 상관없음
	}


4.6 비트연산
비트 단위 연산
- 비트 논리연산
- 비트 쉬프트연산

8 나누기 4 는 2
8 쉬프트 2 는 2
2진수에서 우로 한칸씩 이동할 경우 나누기 2
2진수에서 좌로 한칸씩 이동할 경우 곱하기 2
어떤 경우에서 나누기 보다 쉬프트 연산이 더 빠르기도 함.

package chapter04;

	public class OpEx6_1 {
		public static void main(String[] args) {
			// << 연산
			System.out.println(3 << 2 );
			System.out.println("3의 2진수  : "+Integer.toBinaryString(3));
			System.out.println("12의 2진수 : "+Integer.toBinaryString(12));

			// >> 연산
			System.out.println(8 >> 2 );
			System.out.println("8의 2진수 : "+Integer.toBinaryString(8));
			System.out.println("2의 2진수 : "+Integer.toBinaryString(2));

			// >>> 연산(부호를 무시하고 0으로 채운다)
			System.out.println(-8 >>> 3);
			System.out.println("-8의 2진수 : "+Integer.toBinaryString(-8));
			System.out.println("-8 >>> 3   : "+Integer.toBinaryString(-8 >>> 3));

		}
	}


4.7 삼항연산
조건식 ? 값1(연산식) : 값2(연산식)
조건식이 참(true)이면 값1 또는 연산식이 실행되며, 그렇지 않으면(false) 값2가 실행된다.

728x90
300x250