반응형

복합 대입 연산자( +=, -=, *=, /=, %= 등 )

   - short, byte형의 명시적 형 변환이 필요없다.

short num = 30
num += 30L

처리과정

   1) num = num + 30L

   2) num = (short) (num + 30L)

※ 복합 대입 연산자를 사용하면 형 변환을 자동으로 해준다.


논리 연산자 ( &&, ||, ! )

   Short-Circuit Evaluation(Lazy Evaluation) (SCE)

   - 연산의 효율 및 속도를 높이기 위해서 불필요한 연산을 생략하는 행위.

예) "&&"의 왼쪽 피연산자가 false이면, 오른쪽 피연산자는 확인하지 않는다.

     "||"의 왼쪽 피연산자가 true이면, 오른쪽 피연산자는 확인하지 않는다.


단항 연산자 ( +, -, ++, -- )

   - 단항 연산자 사용 시에도 연산을 int형으로 진행한다. 따라서 형 변환이 필요하다.

short num = 30
//short num2 = +num (에러)
short num2 = (short)(+num)
//short num3 = -num (에러)
short num3 = (short)(-num)

   - "++", "--" 연산자는 증가 및 감소된 값을 반환하는 것만 아니라 실제 메모리에 들어있는 값도 변경시킨다.

   - "++", "--" 연산자는 앞에서 사용 시, 선반영, 뒤에서 사용 시 후반영 시킨다.

int num = 30
++num
num++
System.out.println(num) // 32
System.out.println(--num) // 31, 값 감소 후 출력
System.out.println(num) // 31
System.out.println(num++) // 31, 값 출력 후 증가
System.out.println(num) // 32

비트 연산자 ( &, |, ^, ~ )

   - 연산자 종류

      "&" 비트 AND 연산

      "|" 비트 OR 연산

      "^" 비트 XOR 연산(두 비트 값이 서로 다른 경우에만 1, 나머지 경우에는 0)

      "~" 비트 NOT 연산

   - 비트 연산자 사용 시에도 연산을 int형으로 진행한다. 따라서 형 변환이 필요하다.

byte a = 16
byte b = 9
// byte c = a & b (에러)
byte c = (byte)(a & b)

// 0 0 0 1 0 0 0 0
// 0 0 0 0 1 0 0 1
System.out.println(c) // 0

비트 쉬프트 연산자 ( <<, >>, >>> )

   - 연산자 종류

      "<<" 비트 열을 왼쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 0 으로 채운다 )

      ">>" 비트 열을 오른쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 음수 1, 양수 0 으로 채운다 )

      ">>>" 비트 열을 오른쪽으로 이동시킨다. ( 이동에 따른 빈 공간은 0 으로 채운다 )

byte a = 16 // 00010000
System.out.println((byte)(a << 1)) // a의 값을 왼쪽으로 1칸 이동 ( 00100000 )
System.out.println((byte)(a << 2)) // a의 값을 왼쪽으로 2칸 이동 ( 01000000 )
byte b = 4 // 00000100
System.out.println((byte)(b >> 1)) // b의 값을 오른쪽으로 1칸 이동 ( 00000010 )
System.out.println((byte)(b >> 2)) // b의 값을 오른쪽으로 2칸 이동 ( 00000001 )
byte c = -4 // 11111100
System.out.println((byte)(c >> 1)) // c의 값을 오른쪽으로 1칸 이동 ( 11111110 )
System.out.println((byte)(c >> 2)) // c의 값을 오른쪽으로 2칸 이동 ( 11111111 )

 

10진수를 2진수로 변환


public class bitoper {

	private static void Print(int count, int[] bitArray ) {
		for(int i = count; i >= 0  ; i--)
			System.out.print(bitArray[i]);
	}

	private static void getBinary(int a, int count, int[] bitArray ) {
		for(count= 0; a != 1; count++ ) {
			bitArray[count] = a%2;
			a = a/2;
		}
		bitArray[count] = a;
		Print(count, bitArray);
	}
	
	static void decimalToBinary(int a, int count, int[] bitrep) {
		getBinary(a, count, bitrep);		
	}

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt(); 
		int count = 0;
		int[] bitrep = new int[32];

		decimalToBinary(a, count, bitrep);
	}
	
}

 

 

[참고자료]

윤성우의 열혈 Java 프로그래밍

반응형

+ Recent posts