본문 바로가기

JAVA/기초 문법

연산자, 2진법/16진법, Random

Operator 연산자
  +, -, *, /, %
  / : 몫
  % : 나눈 후 나머지

활용하기

		int num1, num2;
		int result;	//결과
		
		num1 = 25;
		num2 = 7; //나누는 값이 0이되면 에러발생.
		
		result = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + result);
		
		result = num1 - num2;
		System.out.println(num1 + " - " + num2 + " = " + result);

		result = num1 * num2;
		System.out.println(num1 + " * " + num2 + " = " + result);
		
		result = num1 / num2;
		System.out.println(num1 + " / " + num2 + " = " + result);
		
		result = num1 % num2;
		System.out.println(num1 + " % " + num2 + " = " + result);
		
		int number = 0;
		
		number = number + 1;	// 자기 자신의 값을 갱신
		number += 1;
		number *= 1; 	//곱셈 뺄셈 모두 사용 가능
		
		// increment(증가연산자) ++
		// decrement(감소연산자) --
		number++;	// == 	number = number + 1;
		++number;
		
		number--;
		--number;
		
		System.out.println("number = "+number);
		
		int tag;
		tag = ++number;		//number = 3, tag = 3
		
		System.out.println("number = "+number);
		System.out.println("tag = "+tag);
		
		tag = number++;		//number = 4,	tag = 3
		
		System.out.println("number = "+number);
		System.out.println("tag = "+tag);
		
		tag = (number++);	//number = 5,	tag = 4
		
		System.out.println("number = "+number);
		System.out.println("tag = "+tag);
		
	}

}

 

 

 

논리연산자(true/false)


 && AND 그리고
 || OR 또는
 ! NOT ~아닌
 
 (일반적으로 제어문과 같이 사용(if, while, do while) )
 
 < > <= >= == 비교연산자

 

		int number = 0;
		
		/*
		 		AND 0 0	->	0
		 		0 1	->	0
		 		1 0 ->	0	
		 		1 1 ->	1
		 */
		
		System.out.println(number > 0 && number < 10);
		
		/*
		 		OR	0 0 ->	0
		 		0 1 ->	1
		 		1 0 ->	1
		 		1 1 ->	1
		 */
		System.out.println(number > 0 || number < 10);		
		
		/*
		 		NOT 0 -> 1
		 		1 -> 0
		 */
		number = 5;
		System.out.println(number == 5);
		System.out.println(number != 5);	//같지 않다
		
		System.out.println(!(number > 5 && number < 10));	
		//()안의 값은 false이나 !가 붙어 true가 된다
		System.out.println(!(number < 5));
		//!가 붙어 ()안이 number >= 5로 변해 true가 되는 상황
		
		
	}
}

 

 

 

 

삼항연산자

 

value = (조건) ? '값1' : '값2' ;
(조건)이 참일경우 값1, (조건)이 거짓일경우 값2 대입.

		char c;
		
		c = (number > 0)?'Y':'N';
		System.out.println("c = " + c);
		
		int n;
		n = (number < 5)?10:20;
		System.out.println("n = "+ n);
		
		String str;
		str = (number > 3)?"3보다 크다":"3보다 작다";
		System.out.println("str = "+ str);
		
		

 

 

 

 

 

============================================================

 

 

 

 

 

***2진법 쉽게 계산하는 방법

 

  ㄱ.        ㄴ.

1010   1100 (의 경우 앞 4자리와 뒷 4자리를  ㄱ. 과 ㄴ. 으로나눔)

  ㄱ.       ㄴ.
 1010      1100 (의 경우 앞 4자리와 뒷 4자리를 나눔)

8 4 2 1   8 4 2 1  (아래  1 2 4 8 순으로 숫자 대입)
8 + 2      8 + 4 ( 1의 아래 숫자만 추출 후 더함)
10           12  



10*16의1승   12*16의0승 
 10*16         12*1
  A              C

10진법 답은 ㄱ+ㄴ = 172

 

 

  ㄷ.         ㄹ.       ㅁ.

1111     0000      1010

  15            0           10

=F(외울것)   0          =A(외울것)

 

 

 

EX) &의 사용법

 

0xAC &0xF0의 경우

 

0xAC

0xF0

------  &연산자 도출(겹치는것만 1)

		int result;
		
		result = 0xAC & 0xF0;
		System.out.println("result = " + result); //답 : result = 160
		
		System.out.printf("0x%x", result);	//16진수 출력,  답 : 0xa0

 

 

 


 

 

***16진법 2진법으로 쉽게 계산하는 방법

 

 

Ex)

  ㄱ.         ㄴ.

0xC4 ^ 0x78    =>  XOR연산자 

0xC4 ^ 0x78    =>  XOR연산자 

ㄱ.    C        4
      12        4
    (8421)   (8421)
     1100     0100

ㄴ.    7        8
     0111     1000  


ㄱ.  0xC4 =  1100  0100
ㄴ.  0x78 =  0111  1000
     도출  ---------------  ^(XOR)로 다를 때만 1
ㄷ.          1011  1100
           (8421) (8421)
             11     12
              B       C

 

정답은 0xBC 

		//XOR c4 78
		result = 0xc4 ^ 0x78;
		System.out.printf("0x%x\n", result); //답 : 0xbc
		

 

 

 


 

 

 

Ex)

 

다음의 결과 값을 먼저 기입하고 결과를 확인하라.


int num1, num2;
num1 = 128;
num2 = 56;


16진수로 바꾼다


num1 = (num1 & num2) | (num1 & num2);
num2 = ~(num1 ^ num2);

 

package main;

public class Ex11 {
	public static void main(String[] args) {
		
		int num1, num2;
		
		num1 = 128;
		num2 = 56;
		//16진수로 바꾼다
		//num1 = 128 = 8*16의 1승 + 0*16의 0승 = 80(16진수) = 1000 0000
		//num2 = 56 = 3*16의 1승 + 5*16의 0승 = 35(16진수) = 0011 0101
		//num1 = 0x80;
		//num2 = 0x35;
		System.out.printf("0x%x\n",num1);
		System.out.printf("0x%x\n",num2);
		
		
		num1 = (num1 & num2) | (num1 & num2);
		//num1 = (1000 0000 & 0011 0101) | (1000 0000 & 0011 0101)
		//	   = (0000 0000) | (0000 0000)
		//	   = 0000 0000
		//	   = 0
		System.out.println(num1);
		System.out.printf("0x%x\n",num1);
		
		
		num2 = ~(num1 ^ num2);
		//num2 = ~(1000 0000 ^ 0011 0101)
		//= ~(1011 0101)
		//= 0100 1010
		//= -4*16 + 10
		//= -64 + 10
		System.out.println(num2);
		System.out.printf("0x%x",num2);

		
	
	}
}

 

 

 

 

 

===============================================================================

 

 

비트연산자 (bit Operator)

bit : 0, 1 로 표현
 

종류 : 
  & : AND 겹치는것만 1
  |  : OR  둘중하나가 1이면 1
  ^  : XOR -> 보안쪽에서 사용. 1이나 0으로 안겹치는 것만 1
  <<  : left shift
  >>  : right shift
  ~  : 반전

 

 

 

 

1. & : AND 연산자

		//AND
		int result;
		
		result = 0xAC & 0xF0;
		System.out.println("result = " + result); //답 : result = 160
		
		System.out.printf("0x%x\n", result);	//16진수 출력,  //답 : 0xa0
		
		
		result = 0x48 | 0xB4;
		System.out.printf("0x%x\n",result);  //답  : 0xfc
		

 

 

2.  ^ : XOR 연산자

		//XOR c4 78
		result = 0xc4 ^ 0x78;
		System.out.printf("0x%x\n", result); //답 : 0xbc
		

 

 

3. ~ : 반전연산자

		//반전 (~) 0 -> 1 	1 -> 0	(=NOT 연산자)
		byte by = 0x55; // 0101 0101  -> ~0101 0101 == 1010 1010
		   	 	//		  	 	A   A
		System.out.printf("0x%x\n", by);
		

 

 

4. << : Left shift 연산자

   >> : Right shift 연산자

		// left shift << (*2)
		/*
		 			0000 0001(옆으로 한칸 밈) -> 1(값은 *2가 됨)
		 			0000 0010			 -> 2
		 			0000 0100			 -> 4
		 			8421 8421
		 */
		
		 byte by1;
		 by1 = 0x1 << 1;
		 System.out.println("by1 = "+by1);
		
		 by1 <<= 1;		//기존 by1*2의 값이 됨
		 System.out.println("by1 = "+by1);
		 
		 by1 <<= 1;
		 System.out.println("by1 = "+by1);
		 
		 
		//right shift >> (/2)
		
		 by1 >>= 1;		//기존 by1/2의 값이 됨
		 System.out.println("by1 = "+by1);
		 

		 

 

Ex)

int number;
number = 5;
number = number << 4;
number = number >> 5;
number = number >> 1;

package main;

public class Ex10 {
	public static void main(String[] args) {
		//8421
		int number;
		number = 5;	//0101
		System.out.println(number);
		
		number = number << 4;	// 0101 0000   // = 5*16 + 0 = 80
		System.out.println(number);
		
		number = number >> 5;	// 0010		// = 2
		System.out.println(number);
		
		number = number >> 1;	// 0001		// = 1
		System.out.println(number);
		
	}
}

 

 

 

 

  **공학계열 연습문제
 num1 = 0x12;
 num2 = 0x34;
 number = ~(num1 & ~num2)

 

 

 

 

 

 


 

 

 

 

**형변환

 

자료형변환

  boolean	1byte 
  byte		1 
  short		2 
  int		4 
  long		8 
  float		4 
  double	8

 

 

 

1. 자동형변환

		short sh = 10;
		int num;
		
		num = sh;	//자동형 변환
		System.out.println("num = "+num);

 

 

 

 

2. 강제(cast) 형변환

		num = 20;
		sh = (short)num;	//강제(cast) 형변환
		System.out.println("sh = "+sh);
		
		num = 128;
		byte by = (byte)num;
		System.out.println("by = "+by);		//작은 그릇에 큰 값을 담아 오류값이 나옴
		
		float f1;
		f1 = (float)3 / 2;
		System.out.println("f1 = "+f1);

 

 

 

 

우선순위

		long lo = 12312341324L;
		float fl;
		fl = lo;	//소수점값이 정수값보다 우선순위가 높아 에러 없음

 

 

 

오차범위와 오류 E10

		double d;
		d = lo;
		System.out.println("fl = "+fl); //fl = 1.23123415E10
		System.out.println("d = "+d);  //d = 1.2312341324E10
		//float의 오차범위로 fl과 d가 값이 다름
		//fl = 1.23123415E10 의 뜻
		//				 *10의 10승
		// E3이 뒤에 붙으면 *10의 3승
		// E-2이 뒤에 붙으면 *(1/10)의 2승   -> 소수점이 앞으로 2칸 이동

 

 

 

형 변환으로 소수점 뒷자리 자르기

		double value = 123.4567;
		int n;
		n = (int)value;
		System.out.println("n = "+n);	//소숫점 뒷자리 자르기
		

 

 

 

 

 

 

 


 

 

 

**Random 

random : 난수, 무작위     (<-> pattern)

 

		int rnum;
		
		rnum = (int)(Math.random() * 5);	// 5 : 0 ~ 4의 범위
		System.out.println("rnum = "+rnum);
		

 

		//0 ~ 9
		rnum = (int)(Math.random() * 10);	
		System.out.println("rnum = "+rnum);
		
		//10 ~ 20
		rnum = (int)(Math.random() * 11) + 10;	
		//				0 ~ 10
		
		// 10 20 30 40 50
		rnum = ((int)(Math.random() * 5) + 1) * 10;	
		
		// -1 0 1
		rnum = (int)(Math.random() * 3) - 1;

 

 

x, y 축에서의 랜덤이동

		//x축과 y축 함수에서 몹의 랜덤 이동경로
		int x = (int)(Math.random() * 3) - 1;	// -1 0 1
		int y = (int)(Math.random() * 3) - 1;	// -1 0 1

 

 

 

 


 

 

 

 

 

 

 

 

 

'JAVA > 기초 문법' 카테고리의 다른 글

제어문  (0) 2020.05.21
배열  (0) 2020.05.20
변수, Scanner, byte  (0) 2020.05.19
*첫날 메모  (0) 2020.05.18
객체지행개념 6장  (0) 2020.05.07