비트 연산자
AND연산자
자릿수가 서로 1로 일치할때만 1이 되며
그외의 경우엔 모두 0이 된다
(여기서 1이란 참,0이란 거짓으로 봐도 무방하다)
0 0 1 0 1
AND 0 1 0 1 0
0 0 0 0 0
0 0 1 0 1
AND 0 1 1 1 1
0 0 1 0 1
OR연산자
이 녀석은 단 하나라도 자리에 1이 있으면 연산되는 해당 자리수의 값을 1로 만든다
or 연산자의 기호는 파이프 기로하 부르는데
엔터 위에 \를 쉬프트와 같이 누르면 된다
00101
or 01010
01111
00100
or 01110
01110
00101
or 01110
01111
XOR연산자
^ 같은 갈매기 표시는 6과 시프트를 같이 누른다
같은 자리에 배치된 값이 서로 다른 경우에만 1이 된다
00101
xor 01010
01111
00100
xor 01 1 10
01010
짤팁
‘A’=65
‘B’=66
‘a’=97
‘b’=98
not연산자 ~
모든것을 반전한다
단순한 방법:not의 대상이 되는 값 +1을 하고 부호를 반전한다
음수시스템
5==>101(2)
~5==>6
의문점 왜 5가 -6으로 바뀐건가?
0000 0101 = 5
1111 1010 = -6
정수시스템은 기본적으로 두가지로 나뉜다
맨앞에 부호비트 나머지는 숫자
0000 0001 = 1
1000 0001 = -1 ?
1+(-1) = 0
2진수는 0과 1 외에 표현이 불가하다
1111 111 - 올림수
0000 0001 = 1
1111 1111 = -1
——————-
1 0000 0000
음수 만들기 규칙
가장 오른쪽에서 발견되는 1을 찾기전까지는 모든 값을 유지한다
왼쪽의 값들은 전부 반전한다
0001 0100 = 20
1110 1100 = -20
————————
1 0000 0000
0000 0101 = 5
1111 1010 = ~5 = -6
1111 1010 = ~5 = -6
0000 0110 = 6
연습문제1 -11을 2진수로 표현해보자
11 = 0000 1011
-11 = 1111 0101
연습문제2 숫자4의 not을 계산해보자
4 = 0000 0100
~4 = 1111 1011
~4 = 1111 1011 = x = -5
0000 0101 = 5
-(4 + 1) = -5
연습문제3 숫자 7의 not을 계산해보자
0000 0111 = 7
1111 1000 = x= -8
-(7+1) = 8
참조:coding-factory.tistory.com/521
시프트 연산자
시프트 연산자도 비트 연산자와 마찬가지로
2진수를 기반으로 동작하는 연산자이다
그러나 비트 연산자는 실제 값의 연산인 반면
시프트 연산자는 비트를 이동시키는 연산자이다
(결국엔 곱셉이나 나눗셈의 역할을 수행하게 된다)
장점:일반적인 곱셈이나 나눗셈의 역할을 수행하게 된다
단점:2의 승수로만 동작 할 수 있다
특징:비트 연산자는 소수점에 적용이 불가능하다
int num1 = 5;
int shiftNum = 1;
int res = num1<<shiftNum;
System.out.println("5<<1="+res);
결과 5<<1=10
왜 저렇게 계산이 되는걸까?
0000 0101 = 5
0000 1010 = 10
만약
res = num1 << 2;
이렇게 된다면
0000 0101 = 5
0001 0100 = 20
만약
res = num1 >> 1;
0000 0101 = 5
0000 0010 = 2
만약 부등호가 반대일때
res = num1 << 3;
0000 0101 = 5
0010 1000 = 40
여기서 문제
10.5/2 - shift연산자를 무조선 써야한다는 제약
1050/2=525
525/100 = 5.25
위에 식처럼 나오는 코드를 작성한다
float num = 10.5f;
float shiftNum = 1;
float scaleFactor = 100;
float res = (int) (num * scaleFactor) >> (int) shiftNum;//(int)로 강제 변환해준다
res = res / 100;
순서가 오른쪽에서 왼쪽으로 진행된다
res /= 100;//축약
해석
num * scaleFactor ==> 1050 ==> 10000011010
>> shiftNum ==> 01000001101 ==> 525
525/100 ==> 5.25
Scanner 메서드
키보드를 입력받기 위해서는 Scanner 메서드가 필요하다
아래의 형식이 키보드 입력을 받을때
준비하는 과정이다라고 우선은 받아들이도록 한다
Scanner scan = new Scanner(System.in);
스캐너메서드 호출 메서드이름 = new Scanner(System.in);
정수 입력시에는
int num = scan.nextInt();
소수점 입력시에는
float fnum = scan.nextFloat();
문자열 입력시에는
String text = scan.next();
IF문
if의 사전적 의미:만약
특정 상황을 선택해야하는 상황에서 사용한다
if문의 조건이 만족되지 않는 경우 else를 사용한다
조건이 2가지가 아니라 3~4가지라면 else if를 통해 조건을 덧붙일수 있다
if문 작성법
1.if문을 적고 소괄호를 열고 닫는다
2.중괄호를 열고 닫는다
3.소괄호 안에 조건을 적는다
4.조건이 만족되었을 경우 작업할 코드를 중괄호 안에 작성한다
if문 동작 방식
1.조건이 참,거짓을 판별한다
2.조건이 참이라면 if문의 중괄호 내용을 진행
3.그렇지 않다면 제낀다
Scanner 사용시 scan.nextInt();의 경우엔
입력으로 정수만 들어올 수 있고
만약 정수가 아닌 다른 값이 입력받는다면
Exception(예외처리)가 뜬다
이것은 추후에 try catch finally를 배우면 활용할 수 있다
입력한 값이 홀짝판별 코드
Scanner scan = new Scanner(System.in);
System.out.println("정수를 입력하세요");
int num = scan.nextInt();//정수를 입력받는 공간
if (num % 2 == 0) {
System.out.println("입력한 값은 짝수입니다.");
} else if (num % 2 == 1) {
System.out.println("입력한 값은 홀수입니다.");
}
논리 연산자의 역할:
서로 다른 두개의 논리를 결합할 수 있다.
Scanner scan = new Scanner(System.in);
System.out.print("숫자를 입력하세요: ");
int num = scan.nextInt();
System.out.println("입력한 값은 = " + num);
논리연산자 AND - &&
if((num % 2 == 0) && (num % 3 == 0)) {
System.out.println("입력값은 2의 배수이면서 3의 배수다.");
} else {
System.out.println(
"입력값은 2와 3의 배수를 모두 만족하지 못한다.");
}
// 논리연산자 OR - ||
if((num % 2 == 0) || (num % 3 == 0)) {
System.out.println("입력값은 2 또는 3의 배수다.");
} else {
System.out.println("입력값은 2 또는 3의 배수가 아니다.");
}
// 논리연산자 NOT - !
if(!(num % 2 == 0)) {
System.out.println("2의 배수가 아니다.");
} else {
System.out.println("2의 배수가 맞다.");
}
와 3의 배수를 만족하면서
5의 배수 또한 만족하면 출력하도록 만들어보자!
int num = 30;
// 숏 서킷(Short Circuit)
if((num % 2 == 0) &&
(num % 3 == 0) &&
(num % 5 == 0)) {
System.out.println(
"입력값은 2, 3, 5의 배수를 모두 만족");
} else {
System.out.println(
"2, 3, 5의 배수를 모두 만족하지 못함");
}
if 연습문제 2.
홀수이면서 5로 나눈 나머지가
1인 숫자만 출력해보자!
Scanner scan = new Scanner(System.in);
System.out.println("현재 찾는값은 홀수이면서\n5로나눠서 1이 남는 숫자다");
System.out.println("정수를 입력하세요");
int num = scan.nextInt();
if (num % 2 == 1 && num % 5 == 1) {
System.out.println("현재값은=" + num + "이며 조건을 충족하는 숫자입니다.");
} else {
System.out.println("해당 조건을 충족하는 숫자가 아닙니다");
}
if 연습문제 3.
2의 배수이면서 4의 배수인 숫자를 출력해보자!
Scanner scan = new Scanner(System.in);
if (n % 2 == 0 && n % 4 == 0) {
System.out.println("입력된 값은" + n + "이며 해당 조건을 충족한다");
} else {
System.out.println("해당 조건에 맞지 읺습니다.");
}
if 연습문제 4.
2의 승수이면서 4의 배수인 숫자를 출력해보자!
System.out.println("2의 승수이면서 4의 배수");
System.out.println((27 & (27 - 1)));
int num = scan.nextInt();
System.out.println("입력한 숫자는 " + num);System.out.println("입력값은 " + ((num != 0) && ((num & (num - 1)) == 0)));
if ((num != 0 && ((num & (num - 1)) == 0)) && (num % 4 == 0)) {
System.out.println("조건 충족");
} else {
System.out.println("조건 불충족");
}