day 4 - 연산자

2022-03-04

	단항연산자: ~ ! ++ -- (cast) -(부호)
    // ~ (tilde): 이진논리 Not 연산자(1보수)
	int n = 10;
	System.out.printf("[%32s]\\n", Integer.toBinaryString( n ));
	System.out.printf("[%32s]\\n", Integer.toBinaryString( ~n ));

	// !: 일반논리Not 연산자 (결과값:boolean)
	boolean bOk = !(3>2);
	System.out.println(bOk);

	// ++ --  : 증감연산자
	// ++변수  : 전위형
	//   변수++: 후위형
	int a = 10;
	a++;
	System.out.printf("a=%d\\n", a);

	// 복합연산에서 전(후)위형 연산자의 의미
	int x = 10;
	int y = 5;
	int z;

	z = ++x + y--;
	System.out.printf("%d, %d, %d\\n",x,y,z);

	// -(부호):
	x = -10;
	y = -x;
	System.out.println(y);

	//강제형변환 연산자 : cast 연산자
	// 형식) (자료형)값
	/*
	    자료형변환(Data Conversion)
	    1. 자동형변환 (묵시적 형변환): promotion
	       1) 연산시: 자료형이 큰 쪽으로 변환
	                 1.0 + 1 -> X
	                 double + (int->double) = 2.0
	       2) 대입시: 좌변항으로 형변환(단, 좌변항이 클 경우 )
	                 int a = 10; // 초기화: 변수선언과 동시에 값을 넣는경우
	                 좌변항 = 우변항
	                 a = 100;
	    2. 강제형변환 (명시적형변환): demotion

	 */
	// 대입시 형변환(자동형변환)
	double d;
	// 좌 = 우
	d = 10; // 10(int) -> 10.0(double)
	//강제형변환
	float f;
	//float = (float)double
	f = (float)1.0;
	
    /*
    산술연산자
    *,/(몫),%(나머지)
    + -
    */
	int x = 10, y = 3, z;

	z = x + y;
	System.out.printf("%d + %d = %d\\n", x, y, z);

	z = x - y;
	System.out.printf("%d - %d = %d\\n", x, y, z);

	z = x * y;
	System.out.printf("%d * %d = %d\\n", x, y, z);

	z = x / y;
	System.out.printf("%d / %d = %d\\n", x, y, z);

	z = x % y; // % 를 문자로 인식 시키려면 %%
	System.out.printf("%d %% %d = %d\\n", x, y, z);

	// Format 서식 내에서 "나 \\를 문자로 인식하게 하는 법: \\" , \\\\
	System.out.println("안녕\\\\하세요\\n \\"안녕\\"");

	//몫
	System.out.println(10.0/3);
	System.out.println((int)10.0/3);
	System.out.println((int)(10.0/3));

	// 나머지
	System.out.println(10.0 % 3);
	System.out.println(3 % 10);

	// JAVA int 형보다 작은 형 끼리 연산하면 결과는 int
	// byte + byte -> int
	// short short int
	// byte short int

	byte b1 = 1;
	byte b2 = 2;
	byte b3;

	b3 = (byte) (b1 + b2);

// 관계연산자: > >= < <= == !=
// 결과값: boolean
	int a = 5;
	int b = 3;
	System.out.printf("%d > %d -> %b\\n", a, b, a>b);
	System.out.printf("%d >= %d -> %b\\n", a, b, a>=b);
	System.out.printf("%d < %d -> %b\\n", a, b, a<b);
	System.out.printf("%d <= %d -> %b\\n", a, b, a<=b);
	System.out.printf("%d == %d -> %b\\n", a, b, a==b);
// 이진논리연산자 : &
	System.out.printf("[%32s]: 7\\n", Integer.toBinaryString( 7 ));
	System.out.printf("[%32s]: 5\\n", Integer.toBinaryString( 5 ));

	System.out.printf("[%32s]: 7&5\\n", Integer.toBinaryString( 7 & 5 ));
	System.out.printf("[%32s]: 7|5\\n", Integer.toBinaryString( 7 | 5 ));
	System.out.printf("[%32s]: 7^5\\n", Integer.toBinaryString( 7 ^ 5 ));

	// & ^ | + >> 활용사례

	int birthday = 0x19880815;
	System.out.printf("생년월일 : %x \\n", birthday);
	int year = birthday >>>16;
	System.out.printf("출생년도: %x년 \\n",year);

	//출생월 추출
	int month = birthday >> 8 & 0x000000ff;
	System.out.printf("출생월: %x월\\n",month);

	int day = birthday & 0xff;
	System.out.printf("출생일: %x일\\n",day);

	// ^를 이용해 월의 자리를 소거하기
	//                        0x19880815   8 : 1000  5 : 0101
	//                        0x00000800   8 : 1000  0 : 0000
	//                        0x19880015       0000      0101

	birthday = birthday ^ 0x800;
	System.out.printf("생년월일 : %x \\n", birthday);
	System.out.printf("true && true : %b\\n", (true && true));
	System.out.printf("true && false : %b\\n", (true && false));
	System.out.printf("false && true : %b\\n", (false && true));
	System.out.printf("false && false : %b\\n", (false && false));

	System.out.println();

	System.out.printf("true || true : %b\\n", (true || true));
	System.out.printf("true || false : %b\\n", (true || false));
	System.out.printf("false || true : %b\\n", (false || true));
	System.out.printf("false || false : %b\\n", (false || false));

	int x = 1;
	int y = 2;
	boolean bResult;

	bResult = (--x > 0) && (++y > 0);
	//          ^ 이 연산이 이미 false이기 때문에 뒤의 명령은 수행하지 않는다.
	// && 와 ||는 첫번째 연산에서 이미 결과가 나오면 다음 연산은 처리하지 않는다.
  • 실습

좋은 웹페이지 즐겨찾기