본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

2022년 11월 4일 _ 3회차(주석, 연산자)

by 초응 2022. 11. 4.

[전날 내용 복습]

-레퍼런스 자료형

:실제 데이터를 저장하는 게 아닌 데이터가 저장되어 있는 주소를 저장하는 방식이다.

:데이터는 일회성이며, 일회성 데이터를 보완하기 위해 변수를 만든다.

:레퍼런스 자료형과 기본자료형 구분은 실제 데이터를 가지고 있느냐 데이터가 저장되어있는 주소를 가지고 있느냐로 구분한다.

:레퍼런스 자료형의 특징: 변수의 크기는 4Byte이며 내가 넣을 수 있는 저장 데이터는 이론상 무제한이다. 내가 주소를 확인하거나 사용은 어려우며 주소 참조만 가능한다.

 

- class 명명규칙

: 대문자로 시작한다./ 명사와의 두 단어 이상이 합쳐질 때 첫 이니셜을 대문자로 한다./ 명사화/ 파일 이름= 클래스 이름

-변수 명명규칙

: 영문자와 숫자를 섞어 쓸 수는 있어도 숫자로 시작하면 안 됨.

: 특수문자는 변수로 사용하지 못한다. (단, 단어와 단어 사이의 구분을 짓기 위한 _,$는 사용 가능하다)

: 이미 있는 기능의 단어들은 사용이 안된다.(if, for 등)

-형변환시 같은 특징을 가진 전혀 다른 데이터 타입으로만 가능하다. ex) int ->boolean 불가능하다.

 


[주석]

-번역하는 대상을 제외시킬 때 사용한다.

1. /*~*/ : 여러 줄 주석

2. // : 한 줄 주석 ( (ctrl + / 을 누르면 선택된 줄 한 줄 주석 처리 가능)

3. /**~*/ : Documentation (문서화) 주석

 

주석은 한글로 쓸 경우 에러가 발생하는 경우가 있어 최대한 영어로 작성하자.

API : 사전. 내가 필요한 기능이 있을 때 사용함.

 

[연산자] 

연산자는 어떠한 계산을 처리하도록 하는 특수문자들을 지칭하는 것이다.

 

- 연산자의 우선순위

1 최우선연산자 . [] () . 은 접근 연산자이다.
2 단항연산자 ! ~ ++ -- + - (cast) ! ~ : 부정연산자
++ -- :증감연산자
3 산술연산자 + - * / %  /는 몫 (그룹화계산)
% 나머지 값 (진수코드)
4 시프트연산자 << >> >>> 형식 :  항 연산자 이동수
<< 왼쪽 (0)
>> 오른쪽 (부호화비트)
>>>오른쪽(0)
5 관계연산자 > < >= <= == != boolean으로 반환
6 비트연산자 & ^ |  
7 논리연산자 && ||  
8 삼항연산자 조건항 ? 참 : 거짓 분리를 발생하는 연산식
9 대입연산자 = += -= *= /= %=  
10 증감연산자 ++ -- 후위형일 경우 i++;

 

[시프트 연산자]

형식 :  항 연산자 이동수(ex. <<1)

1. << : 2진수로 변화된 데이터를 왼쪽으로 원하는 만큼 이동 (0으로 채움).

2. >> : 2진수로 변화된 데이터를 오른쪽으로 원하는 만큼 이동 (부호화비트로 채움).

3. >>>: 2진수로 변화된 데이터를 오른쪽으로 원하는만큼 이동(0으로 채움).

 

[비트 연산자]

1. & (and) : 참참참 나머지는 거짓.  대조되는 비트를 비교하여 모두 1이면 1, 하나라도 0이면 0을 반환.

2. | (or) : 거짓거짓거짓 나머지는 참. 대조되는 비트를 비교하여 하나라도 1이면 1, 둘 다 0이면 0을 반환.

3. ^ (xor) : 대조되는 비트를 비교하여 둘 다 같으면 0, 하나라도 다르면 1을 반환.

package day03;

public class Day03_02 {
	
	public static void main (String [] args) {
		System.out.println("1.(9)대입연산자와 (3)산술연산자(+,-,*,/(몫),%(나머지)");
		
		int i = 10;
		System.out.println("i="+i);
		
		i+=1;
		System.out.println("i="+i);
		
		i++;
		System.out.println("i="+i);
		
//		i = i-1;
//		i-=1;
		i--;
		System.out.println("i="+i);
		
//		i= i*2;
		i*= 2 ;
		System.out.println("i="+i);
		
		System.out.println("2.(2)단항연산자(~,!,++,--,(cast))");
		System.out.println("2_1. 비트 not 연산자 / 계산할 대상을 2진수로 변경한다.");
		
	int m = 24;
		System.out.println("m="+m);
		System.out.println("~m="+~m);
		
		System.out.println("2_2. 논리 not 연산자 / 내가 처리 할 수 있는것은 분리함.");
		boolean bool = true;
		System.out.println("bool="+bool);
		System.out.println("!bool="+!bool);
		
		
		System.out.println("3. (4)시프트 연산자.(<<,>>,>>>");
		/* 형식 항 연산자 이동수 
		 * ex) <<2
		 * 
		 *1. << 2진수로 변화된 데이터를 왼쪽으로 원하는 만큼 이동(0으로 채움)
		 *2. >> 2진수로 변화된 데이터를 오른쪽으로 원하는 만큼 이동 (부호화비트로 채움)
		 *3. >>> 2진수로 변화된 데이터를 오른쪽으로 원하는 만큼 이동 (0으로 채움)*/
	
		 int num = 6;
		 System.out.println("num="+num);
		 System.out.println("num<<2="+(num<<2));
		 System.out.println("num>>2="+(num>>2));
		 System.out.println("num>>>2="+(num>>>2));
		 
		 int numm = -6;
		 System.out.println("numm="+numm);
		 System.out.println("numm="+~num);
		 
		 System.out.println("4.(5)관계 연산자.(<,>,<=,>=,==,!=");
		 System.out.println("7>5="+(7>5));
		 
		 System.out.println("5.(6)비트 연산자.(&,^,|)");
		 
		 /*
		  * 1. & and 대조되는 비트를 비교하여 모두 1이면 1, 하나라도 0이면 0을 반환
		  * 2. | or  대조되는 비트를 비교하여 하나라도 1이면 1, 둘다 0이면 0을 반환.
		  * 3. ^(xor) 대조되는 비트를 비교하여 둘 다 같으면 0 하나라도 다르면 1을 반환. 
		  * 
		  * 
		  * */
		 
		 int num1 = 11;
		 int num2 = 6;
		 System.out.println("num1&num2="+(num1&num2));
		 System.out.println("num1&num2="+(num1|num2));
		 System.out.println("num1&num2="+(num1^num2));
		 /*
		  * num 1 = 11 / 0000 1011 
		  * num 2 = 6  / 0000 0110
		  * 
		  * &          / 0000 0010 = 2
		  * |          / 0000 1111 = 15 -> 하나라도 1이면 무조건 1, 0이면 0을 반환. 
		  * ^          / 0000 1101 = 13
		  * 
		  * */
		 
		 System.out.println("6. (7)논리 연산자.(&&,||(boolean 사용))");
		 System.out.println("true&&true ="+(true&&true));
		 System.out.println("true&&false ="+(true&&false));
		 System.out.println("false&&false ="+(false&&false));
		 
		 System.out.println("true||true ="+(true||true));
		 System.out.println("true||false ="+(true||false));
		 System.out.println("false||false ="+(false||false));
	}
}

예제. i와 j의 값은?
이해가 되지 않음....
package day03;

public class Day03_03 {

	public static void main(String[] args) {
		int i = 1;
		int j = i++;
		
		if((i>++j)&& (i++==j)) {
			i+=j ;
		}
		System.out.println("i="+i);
		System.out.println("j="+j);
	}
}

 

 


삼항 연산자
package day03;

public class Day03_04 {
	
	public static void main (String []args) {
		System.out.println("삼항 연산자.(조건항 ? 참:거짓)");
		
		int num1 = 2;
		int num2 = 4;
		
		int max = (num1>num2)?num1:num2;
		String str = (num1>num2)?"num1변수의 값이 크며 그 값은"+(num1)+"입니다.":"num2변수의 값이 크며 그 값은"+(num2)+"입니다.";
		System.out.println("큰 값= "+max);
		System.out.println(str);
		
	}
}