basicJAVA/2. 연산자

201008 Operation_03

unemo 2020. 10. 8. 17:20
반응형
package b_operation;

public class Operation_03 {
	public static void main(String[] args) {
		/*
		 1. 산술연ㅇ산자
		 	- 사칙연산자 (+,-,*,/), 나머지연산자(%), 쉬프트연산자(<<,>>,>>>)
		 	-두개의 피연산자를 취하는 이항연산자이다.
		 	
		 2. 사칙연산자 (+,-,*,/)
		 	- 두 개의 피연산자 중 자료형의 표현범위가 큰 쪽에 맞춰서 형변환 후 연산을 수행한다.
		 	ex) int + float -> float + float
		 	- int형 (4byte)보다 크기가 작은 자료형간의 연산은 int형으로 형변환 후 연산을 수행한다.
		 	ex) byte + short -> int + int로 바뀐다 (둘다 4byte보다 작으니까)
		 	**주의! 정수형간의 나눗셈에서는 0으로 나누는 것은 금지되어있다.
		 */
		
		 byte b1 = 80;
		 byte b2 = 100;
		 long lo1 = 642L;
		 
		 long result1 = lo1 + b1;	// long이랑 byte 니까 long이 더 크니까
		 System.out.println(result1);
		 
		 int result2 = b1 + b2; // byte + byte 니까 int보다 작으니까 int로 바뀜
		 System.out.println(result2);
		 
		 byte result3 = (byte)(b1+b2); //byte + byte 니까 int인데 byte에 대입해야하므로 cast연산자써줌
		 System.out.println(result3);
		 
		 long lo2 = (long)60000*80000; 	//int + int 니까 int라 int
		 System.out.println(lo2); //overflow가 발생해서 505032704가 나온거임
		 //48억이 나오게하려면 어케??
		 //(long)60000*(long)80000해줄 필요없이 앞에것만 바꿔주면 long*int해주면 long되니까
		 //더 쉽게 60000L*80000도 되는데 보통 변수에 담긴걸로 계산하기때문에
		 //652 180 -76 480 8개
		 
		 /*
		  
		  3. 나머지 연산자 (%)
		  	-왼쪽의 피연산자를 오른쪽의 피연산자로 나누고 난 나머지 값을 돌려주는 연산자
		  	-boolean형을 제외한 기본자료형에 사용가능하다.
		  */
		 
		 //사용자가 정수값 두개를 줄거임 두개를 가지고 몫은 얼마고 ,나머지는 얼마인지 프로그램만들거임
		 
		 int first = 50;
		 int second = 6;
		 
		 int share = first/second;
		 System.out.println(share); //int는 소숫점가질수없으니까
		 int remain = first%second;
		 System.out.println(remain);
		 
		 //10을 8로 나눈 몫은 1이고 나머지는 2이다.
		 System.out.println(first+"을 "+second+"로 나눈 몫은 "+share+"이고 나머지는 "+remain+"이다");
	
		//int인 first를 "을"이라는 string과 더하면 first도 string이 된것
		 
		 
		 /*
		  4. 쉬프트 연산자 (<<, >>, >>>)
		  	그래픽적인 요소를 옆으로 조금씩 이동시키는것. >>>은 그래픽에 사용됨
		  	<<와 >>는 은행에서 사용한다. 저 두가지가 숫자가 클때 계산속도가 빠르다.
		  	shift : 밀다 라는 의미
		  	곱하기와 나눗셈의 연산속도가 매우 우수하여 사용한다.
		  	정수형에만 사용가능하다
		  	피연산자의 각자리 (2진수)를 오른쪽 또는 왼쪽으로 이동한다.
		  	<< : x<<n => x*2^n (oberflow고려)
		  	>> : x>>n => x/2^n (0에 수렴하기때문에 오버플로 고려하지않아도됨)
		  	
		  	10<<2는 원래 int가 되지만 byte라 치면
		  	10을 2진수로 00001010
		  	10<<3 10을 왼족으로 세칸
		  	01010000 은 10*2^3
		  	왼<<연산은 무한히 곱해지다보면 오버플로우 발생함 
		  	10<<11은 8칸가면 제자리니까 즉 10*2^11=10*2^8*2^3이고 2^8은 제자리니까 다시 10*2^3 
		  	10>>2 00000010 은 10/2^2
		  	나눌때(오른>>연산)는 0에 수렴하게됨
		  */
		 
		int i3 = 10;
		System.out.println(i3 << 3);
		System.out.println(i3 >> 10); //10/2^10이됨
		System.out.println(i3<<35);//결국 3칸 이동한거임 왜? int는 32bit니까 32칸
	}
}

 

반응형

'basicJAVA > 2. 연산자' 카테고리의 다른 글

201012 Operation_04  (0) 2020.10.12
201012 Operation_3(2)  (0) 2020.10.12
201008 Operation_02  (0) 2020.10.08
201007 Operation_01  (0) 2020.10.07