Developer/JAVA

Java , 자바의 연산

단님 2024. 7. 22. 17:43
728x90
사칙연산
		System.out.println("사칙연산");
		int a = 10, b = 3;
		System.out.println("a  = "+a+", b = "+b);//a  = 10, b = 3
		System.out.println("a + b = "+(a+b));//a + b = 13
		System.out.println("a - b = "+(a-b));//a - b = 7
		System.out.println("a * b = "+(a*b));//a * b = 30
		System.out.println("a / b = "+(a/b));//a / b = 3
		System.out.println("a % b = "+(a%b));//a % b = 1

 

 

 

대입연산
		System.out.println("대입연산");
		System.out.println("a  = "+a+", b = "+b);//a  = 10, b = 3
		System.out.println("a += b = "+(a+=b));//a += b = 13
		
		System.out.println("a  = "+a+", b = "+b);//a  = 13, b = 3
		System.out.println("a -= b = "+(a-=b));//a -= b = 10
		
		System.out.println("a  = "+a+", b = "+b);//a  = 10, b = 3
		System.out.println("a *= b = "+(a*=b));//a *= b = 30
		
		System.out.println("a  = "+a+", b = "+b);//a  = 30, b = 3
		System.out.println("a /= b = "+(a/=b));//a /= b = 10
		
		System.out.println("a  = "+a+", b = "+b);//a  = 10, b = 3
		System.out.println("a %= b = "+(a%=b));//a %= b = 1
		
		System.out.println("a  = "+a+", b = "+b);//a  = 1, b = 3

 

 

단항연산
		System.out.println("단항연산"); //1씩 증가
		a = 10;
		b = 3;
		System.out.println("a  = "+a+", b = "+b);
		
		System.out.println("++a :"+(++a));//출력선증가
		System.out.println("a  = "+a+", b = "+b);
		System.out.println("a++ :"+(a++));//출력후증가
		System.out.println("a  = "+a+", b = "+b);
		System.out.println("b++ :"+(b++));
		System.out.println("a  = "+a+", b = "+b);
		System.out.println("++b :"+(++b));
		System.out.println("a  = "+a+", b = "+b);

 

 

관계연산
		a = 10;
		b = 3;
		System.out.println("a  = "+a+", b = "+b);
		System.out.println("a==b :"+(a==b));
		System.out.println("a!=b :"+(a!=b));
		System.out.println("a<b :"+(a<b));
		System.out.println("a>b :"+(a>b));

 

 

삼항연산

 

		System.out.println("삼항연산"); // 조건 ? 참 : 거짓
		//String 포함 모든 type 에 적용 가능하다.
		//a와 b 중 큰 값을 출력하기.
		a = 10;
		b = 3;
		int max = (a>b ? a : b);
		boolean bol = (a>b)? true : false;
		char cc = (a>b)? 'T' :'F';
		String ss = (a>b)?"a가 크다" : "b가 크다";
		//String 포함 모든 type 에 적용 가능하다.
		System.out.printf("int max = %d , boolean bol = %b , char cc = %c , String ss = %s  %n" ,max, bol , cc , ss);
		//결과 : int max = 10 , boolean bol = true , char cc = T , String ss = a가 크다 
		System.out.println();

 

 

논리 연산

 

		System.out.println("논리연산"); 
		//=집합연산 and(&&) , or(||) , not(!)
		System.out.println("a  = "+a+", b = "+b);
		
		//1)and -> 모두 짝수이면 true 다
		bol = (a%2==0)&&(b%2==0);
		System.out.println("a와 b 가 모두 짝수인가 ?"+bol);
		
		//2)or -> a,b 중 하나라도 짝수이면 true
		bol = (a%2==0)||(b%2==0);
		System.out.println("a와 b ,둘중 하나라도 짝수인가?"+bol);
		
		//3) ! -> 값을 부정
		System.out.println("a와 b ,둘중 하나라도 짝수인가?의 부정:"+!bol);

 

 

bit 연산 - shift 연산

x>>y x를 우측으로 y 만큼 이동.

x<<y x 를 좌측으로 y 만큼 이동.

	System.out.printf("쉬프트 연산 :10진법 x = %d , y = %d %n",x,y);
	System.out.printf("쉬프트 연산 :2진법 x = %s , y = %s %n",Integer.toBinaryString(x),Integer.toBinaryString(y));
	//결과  :쉬프트 연산 :2진법 x = 1010 , y = 11
	System.out.println("x>>y : "+(x>>y));
	//x를 y만큼 이동,
	//1010 -> 0101 -> 0010 -> 0001 -> 1
	System.out.println("x<<y : "+(x<<y));
	//x를 좌측으로 y 만큼이동,
	//1010 -> 1 0100 -> 10 1000 -> 101 0000 -> 64+16 => 80
	System.out.println("x<<1 : "+(x<<1));
	//x 를 좌측으로 1만큼 이동.
	//1010 -> 1 0100 => 20

 

정수에 들어있는 모든 비트를 오른쪽이나 왼쪽으로 시프트 하는 연산자.

정수내의 모든 비트를 오른쪽으로 이동하는것은 2를 곱한것과 같고.

왼쪽으로 이동하는 것은 2를 나누는 것과 같은 효과를 나타낸다.

 

 

bit 연산 -논리 연산

 

and(&)-두개가 1이면 1 
or(|)- 둘중 하나라도 1 이면 1 
xor(^)- 두개가 같으면 0
		System.out.printf("논리 연산 :10진법 x = %d , y = %d %n",x,y);
		System.out.printf("논리 연산 :2진법 x = %s , y = %s %n",Integer.toBinaryString(x),Integer.toBinaryString(y));
		
		System.out.println("x&y : "+(x&y));
		//1010 =x
		//0011 =y
		//----
		//0010 => 2
		
		System.out.println("x|y : "+(x|y));
		//1010 =x
		//0011 =y
		//----
		//1011 => 11
		
		System.out.println("x^y : "+(x^y));
		//1010 =x
		//0011 =y
		//----
		//1001 => 9

비트 연산자 (&) AND

논리 연산자의 논리곱 연산과 동일하게 동작 특정 비트에서 정보를 추출할 때 많이 사용

 

비트 연산자 (|) OR

논리 연산자의 논리합 연산과 동일하게 동작 특정 비트 정보를 1로 변환할 때 많이 사용

 

비트 연산자 (^) XOR

두 피연산자의 각 비트값이 같으면 0을 반환하고, 다르면 1을 반환

입력 피연산자의 정보를 임의로 변환하고 다시 복원할 수 있는 특징이 있다.

암호 프로그램에서 다양하게 응용됨

 

비트 연산자를 활용한 암호화와 복호화 
				 
		int password = 1234567 , d=0;
		int key = 0x1ABC55; //16진수로.
		System.out.println("암호화 전 password : "+ password);
		//암호화 작업(encryption)
		d = password^key;
		System.out.println("암호화 된 password : "+ d);
		
		//복호화 작업(decryption)
		d = d^key;
		System.out.println("복호화 된 password : "+ d);