본문 바로가기
Example 2018

제어문연습프로젝트 - 연산자샘플(비트논리연산자: 비트반전, 쉬프트, 복합대입)

by ZEROMI 2018. 4. 9.
728x90

package 연산자.샘플;


import java.util.Scanner;


public class OperatorSample {

//비트(bit) 연산자

//~(틸드: Tield, 2), <<, >>, >>> (쉬프트: shift, 5)

//비트논리연산자 : &(and, 8), ^(xor, 9), |(or, 10)

//정수에만 사용하는 연산자임

//메모리에 기록된 정수의 비트값(1, 0)을 계산함

//메모리에 기록된 비트값을 정수 1 또는 0으로 바꾸어서

//출력 처리하는 메소드

public void printBit(int num){

System.out.print(num + " : ");

for(int i = 31; i >= 0; i--)

System.out.print(num >> i & 1);

System.out.println();

}

public void testTeild(){

//비트반전연산자 

//비트 1은 0으로, 비트 0은 1로 바꾸는 연산자

System.out.print("정수 하나 입력 : ");

int num = new Scanner(System.in).nextInt();

printBit(num);

printBit(~num);

}

public void testShift(){

//shift 연산자 : 비트 자리 이동 연산자

//정수값 >> 자리이동값 : 2의 제곱수에 대한 나누기

//정수값 << 자리이동값 : 2의 제곱수에 대한 곱하기

//정수값 >>> 자리이동값

//정수의 비트값을 이동방향으로 자리 이동시킴

//<< : 비게 되는 오른쪽은 무조건 0 채움

//>> : 비게 되는 왼쪽은 양수이면 0, 음수이면 1 채움

//     부호비트를 채움

//>>> : 비게 되는 왼쪽은 무조건 0 채움

//    자바만 제공하는 연산자임

Scanner sc = new Scanner(System.in);

System.out.print("정수 하나 입력 : ");

int num = sc.nextInt();

System.out.print("비트 자리 이동값 : ");

int move = sc.nextInt();

printBit(num);

printBit(num << move);

printBit(num >> move);

printBit(num >>> move);

}

public void testBitLogical(){

//비트논리연산자 : &(AND), ^(XOR), |(OR)

//AND : 1 & 1 => 1,  나머지 경우는 모두 0

//OR : 0 | 0 => 0, 나머지 경우 결과는 모두 1

//XOR : 1 ^ 0, 0 ^ 1 => 1

//      1 ^ 1, 0 ^ 0 => 0

//  비교되는 두 비트가 다를 때 1, 같은 때 0임

Scanner sc = new Scanner(System.in);

System.out.print("첫번째 정수 : ");

int first = sc.nextInt();

System.out.print("두번째 정수 : ");

int second = sc.nextInt();

printBit(first);

printBit(second);

System.out.println("--------------------------");

printBit(first & second);

printBit(first ^ second);

printBit(first | second);

}

public void testComplex(){

//복합 대입 연산자

//산술대입연산자 : +=, -=, *=, /=, %=

//쉬프트대입연산자 : <<=, >>=, >>>=

//비트논리대입연산자 : &=, ^=, |=

int num = 10;

System.out.println("num : " + num);

//1이 아닌 값의 증가/감소가 필요할 때

//num 변수의 값을 3증가 시킬 때

//num = num + 3;

num += 3;  //사용 권장함. 연산속도가 빠름

System.out.println("num : " + num);

num -= 2;  //num = num - 2; 결과가 같음

System.out.println("num : " + num);

num *= 4;  //num = num * 4;

System.out.println("num : " + num);

num /= 4;  //num = num / 4;

System.out.println("num : " + num);

num %= 2;  //num = num % 2;

System.out.println("num : " + num);

num = 10;

System.out.println("num : " + num);

num <<= 2; //num = num << 2;

System.out.println("num : " + num);

num >>= 2; //num = num >> 2;

System.out.println("num : " + num);

num = 10;

num >>>= 3; //num = num >>> 3;

System.out.println("num : " + num);

num = 10;

System.out.println("num : " + num);

num &= 3;  //num = num & 3;

System.out.println("num : " + num);

num = 10;

System.out.println("num : " + num);

num ^= 3;  //num = num ^ 3;

System.out.println("num : " + num);

num = 10;

System.out.println("num : " + num);

num |= 3;  //num = num | 3;

System.out.println("num : " + num);

}

}










728x90