본문 바로가기
JAVA(폐쇄)/학원 내용

자바(JAVA)기초 2일차- 형 변환

by 진사담 2023. 3. 20.
728x90
반응형

 

형변환
-Promotion : 작은 자료형을 큰 자료형에다 대입하는것(자동 형변환, 암시적 형변환)
-Demotion : 큰 자료형을 작은 자료형에다 대입하는것(강제 형변환, 명시적 형변환)
Promotion
double d = 100.5 // 8byte
int n = 200; //4byte

d = n; //n이 d로 대입
System.out.print("d의 값 : "+d); //결과 :200.0;

char c = 'A' //2byte
long 1 = 100; //8byte

l = c;
System.out.println("l의 값 : " + l);

 

Demotion
큰 자료형을 작은 자료형에 대입
	char c = 'B'; // 2byte
	int n = c + 1; // 4byte 여기 까지는 Promotion 캐스팅
	// c = n; c는 2byte, n은 4byte이므로 오류 발생
	c = (char) n;
	System.out.println("c의 값 : " + c); //

	float f = 5.5f;
	int n1 = 0;

	n = (int) f;// 같은 4byte여도 자료형이 일치하지 않으면 대입되지 않는다.
	System.out.println("n의 값 : " + n);
	// float에서 int로 캐스팅 되면서 소수점 이하 자리를 상실하게 된다.

 

Operator(연산자)
연산자 : 연산 기능이 있는 문자

연산자의 우선순위와 결합 방향

연산자의 우선순위느 수식내에 여러 연산자가 함께 등장할때, 어느 연산자가 먼저 처리될것인가를 결정한다.

다음 그림은 가장 높은 우선 순위를 가지고 있는 괄호(())연산자를 사용하여 연산자의 처리 순서를 변경하는것을 보여준다.

 

연산자의 결합 방향은 수식 내에서 우선순위가 같은 연산자가 둘 이상 있을때, 먼저 어느 연산을 수행할것인가를 결정한다.

산술 연산자
산술 연산자는 4칙연산(+.-,/,*)와 나머지를 구하는 연산자인 모듈러(%)로 나뉜다.
	int n1, n2, n3;
		
	n1 = 20;
	n2 = 7;
	n3 = n1 + n2;
		
	System.out.println("n3의 값 : " + n3);
		
	n3 = n1 - n2;
	System.out.println("n3의 값 : " + n3);
		
	n3 = n1/n2;
	System.out.println("n3의 값 : " + n3);
		
	n3 = n1%n2;
	System.out.println("n3의 값 : " + n3);
	//1. 홀짝 구할 때 
	//2. 배수 구할 때

대입 연산자
우변에 있는 값을 좌변에 대입한다.
int n1 = 10;
		int n2 = 7;

		System.out.println("=연산자 : n1 : " + n1 + " n2 : " + n2);

		// 복합 대입 연산자 : 산술 연산자와 대입 연산자가 합쳐진 형태( +=, -=, *=, /=, %=)
		// +=연산자
		System.out.println("+=연산자 : n1 += n2 : " + (n1 += n2));
		// 17
		// 누적합을 구할때 많이 쓰인다.

		// -=연산자
		System.out.println("-=연산자 : n1 -= n2 : " + (n1 -= n2));
        // +=연산자에서 n1의 값이 17로 연산이 되어 -=의 n1 이 17로 시작한다.
		// 10

		// *=연산자
		System.out.println("*=연산자 : n1 *= n2 : " + (n1 *= n2));
		// 70

		// /=연산자
		System.out.println("/=연산자 : n1 /= n2 : " + (n1 /= n2));
		// 10

		// %= 연산자
		System.out.println("%=연산자 : n1 %= n2 : " + (n1 %= n2));
		// 3
비교연산자
두 수의 값을 비교할때 사용하는 연산자
비교한 결과를 논리형 데이터(true, false)로 반환된다.
>(초과), <(미만), >=(이상), <=(이하), ==(같다), !=(같지 않다)

 

	int n1 = 10;
	int n2 = 7;
	boolean result;
	result = n1 < n2;
	System.out.println(result); // false

	result = n1 == n2;
	System.out.println("==연산자 : " + result);

	result = n1 != n2;
	System.out.println("!=연산자 : " + result);

논리연산자
비교연산자를 통한 연산이 2개이상 필요할때 사용한다.
&&, ||, ! 가 쓰인다.
연산결과를 논리형 데이터로 반환을 한다.
&& : 앞 뒤의 연산이 모두 true여야 true를 반환한다.
and의 의미 "그리고"
	boolean result = n1 > n2 && n1 != n2;
	System.out.println("&&연산자 : " + result);

1) 참 && 참 -> 참
2) 거짓 && 참 -> 거짓
3) 참 && 거짓 -> 거짓 //앞의 연산이 거짓이면 뒤는 계산안한다.
4)거짓 && 거짓 -> 거짓

 

	boolean result = n1 < n2 && (n1 += 2) != n2;
	System.out.println(result);
	System.out.println("n1의 값 : " + n1);

앞 뒤의 연산중 둘중 하나라도 참이면 참을 반환한다.
or(또는)의 의미를 가지고 있다.

 

booelan result = n1 < n2 || n1 != n2;
System.out.println("||연산자 : " + result);

참 || 참 =참
참 || 거짓 = 참 앞의 연산이 참이면 뒤의 연산은 진행하지 않는다.
거짓 || 참 = 참
거짓 || 거짓 = 거짓
 !
!는 not의 의미를 가지고 있다. true -> false, false -> true로 바꿔준다.
	boolean result = n1 < n2 || n1 != n2;
	System.out.println("||연산자 : " + result);
    System.out.println("!연산자 : " + !result);

비트연산자
&, |, ^, ~
논리연산자와 유사하지만 bit단위(2진수)의 연산만 가능하다.
일반적으로 암호화, 복호화 작업에 사용된다.
(복호화 또는 디코딩(decoding)은 부호화(encoding)된 데이터를 부호(code)화 되기 전 형태로 바꾸어,
사람이 읽을 수 있는 형태로 되돌려놓는 것이다.)
	int a = 10; //1010
	int b = 7; //0111
	int c = a & b; 
    // 논리곱(and) - 2진수로 바꿨을 때 두 값이 모두 1일 때만 결과가 1, 	나머지는 0
	System.out.println("c : " + c);
		
		
	c = a | b; //논리합(or) - 2진수로 바꿨을 때 두값이 모두 0이면 0, 나머지는 1
	System.out.println("c : " + c);
		
	c = a ^ b;//베타적 or(xor) - 2진수로 바꿨을 때 두값이 서로 같으면 0, 다를 때는 1
	System.out.println("c : " + c);
		
	System.out.println("c : " + ~c);
	//00000000 00000000 00000000 00001101

증감 연산자
++, --
1씩 증가 시키거나 1씩 감소 시켜주는 연산자. 
	//선행 증감
	//변수의 앞에서 사용이 된다.
	a = 10;
	System.out.println("++a : " + ++a);//결과 : 11	
		
	//후행 증감
	//변수의 뒤에서 사용이 된다.
	b = 10;
	System.out.println("b++ : " + b++);
	//1을 더해 주되, 다음번에 다시 한번 사용될때 적용
	System.out.println("b : " + b);
		
	a = 7;
		
	++a;
	++a;
	a++;
	++a;
	a++;
	a++;
	a++;
	System.out.println(a);

간단한 예제
//++a >= b || 2 + 7 <= b && 13 -b >= 0 && (a+=b) - (a%b) >10;
이것을 풀어보면?

예제
과수원이 있다,
배, 사과, 오렌지를 키우고 있는데 하루에 생산되는 양은 각각 5,7,5개
과수원에서 하루에 생산되는 총 개수를 출력하고,
시간당 저체 과일의 평균 생산개수를 출력하세요, 평균값을 담을 변수는 float으로 만들것.
	int apple = 7;
	int pear = 5;
	int orange = 5;
		
	int total = apple + pear + orange;
		
	System.out.println("과수원에서 하루에 생산되는 총 개수 : " + total + "개");
		
	float avg = total/24f;
	//정수 / 정수 -> 정수, 실수 / 정수 -> 실수, 정수 / 실수 -> 실수
	//실수 / 실수 -> 실수
		
	System.out.println("시간당 전체 과일의 평균 생산 개수 : " + avg +"개");

삼항연산자(항이 3개, 조건 연산자)
하나의 조건을 정의하여, 조건이 참일때 반환할 명령, 조건이 거짓일때 반환할 명령을 얻어내기 위한 연산자.
	int a = 10;
	int b = 15;

	boolean result = ++a >= b ? true : false;
	System.out.println("result : " + result);

	char result2 = ++a >= b ? 'O' : 'X';
	System.out.println("result2 : " + result2);

	int result3 = ++a >= b ? 1 : 0;
	System.out.println("result3 : " + result3);

728x90
반응형

'JAVA(폐쇄) > 학원 내용' 카테고리의 다른 글

자바(JAVA) 4일차 - for문  (0) 2023.03.21
자바(JAVA) 3일차 - switch문  (0) 2023.03.21
자바(JAVA) 3일차 - if 문  (0) 2023.03.20
자바(JAVA)기초 1일차  (0) 2023.03.20