๐ ๋นํธ ์ฐ์ฐ
๐ฌ ๋นํธ(bit)
- ์ปดํจํฐ์์ ์๋ฃ๋ฅผ ํํํ๊ธฐ ์ํด ๋นํธ ์ฌ์ฉ
- 1bit = 0 ๋๋ 18bits = 1byte
๐ฌ ๋นํธ ์ฐ์ฐ์
๋นํธ ์ฐ์ฐ์ | ์๋ฏธ | ์ค๋ช
| a = 0b1010, b = 0b0100 |
---|
& | AND | ๋ชจ๋ 1์ด๋ฉด 1 | a & b = 0b0000 |
/ | OR | ํ๋๋ง 1์ด๋ผ๋ 1 | a |
^ | XOR | ์๋ก ๋ค๋ฅด๋ฉด 1 | a ^ b = 0b1110 |
~ | NOT | ํด๋น๊ฐ ๋ฐ์ 1โ0, 0โ1 | ~a = 0b0101 |
<< | ์ผ์ชฝ Shift | ๋นํธ ์ด์ ์ผ์ชฝ์ผ๋ก ์ด๋ | a << n = a * (2^n) |
>> | ์ค๋ฅธ์ชฝ Shift | ๋นํธ์ด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ | a >> n =ย a * (2^-n) |
- ๋นํธ ์ฐ์ฐ์ ์ฐ์ ์์์ ์ฃผ์
- ๋นํธ ์ฐ์ฐ์ ๋
ผ๋ฆฌ ์ฐ์ฐ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ย ๋น๊ต ์ฐ์ฐ๋ณด๋จย ๋ฎ์
๋น๊ต ์ฐ์ฐ
(==, > ๋ฑ) > ๋นํธ ์ฐ์ฐ
> ๋
ผ๋ฆฌ ์ฐ์ฐ
( &&, || ๋ฑ)
- ๋ฐ๋ผ์ ์๋ ์ฝ๋๋ ์ฃผ์ ํ์
if (x & y == 0)
โพ 1 << n
- 2^n์ ๊ฐ์ ๊ฐ์ง
- ์์๊ฐ n์ผ ๊ฒฝ์ฐ ๋ชจ๋ ๋ถ๋ถ ์งํฉ(Power Set)์ ์ ์๋ฏธ
โพ i & (1 << j)
- i๋ผ๋ ๋ณ์์ j๋ฒ์งธ ๋นํธ ์กฐํ
public class ๋นํธ์ฐ์ฐ์ {
public static void main(String[] args) {
for (int i = -5; i < 6; i++) {
System.out.print(i + " ");
printBit(i);
System.out.println();
}
}
private static void printBit(int n) {
for (int i = 7; i >= 0; --i) {
if((n & (1 << i)) == (1 << i)) System.out.print(1);
else System.out.print(0);
}
}
}
// ์ถ๋ ฅ
-5 11111011
-4 11111100
-3 11111101
-2 11111110
0 00000000
1 00000001
2 00000010
3 00000011
4 00000100
5 00000101
์์ฉ ๋ฌธ์ ํ์ด : SWEA ์ด์ง์ ํํ
- ๋ ๊ฐ์ง ํจ์๋ฅผ ๊ตฌํํ๋๋ฐ, ์๋๋ ๋น์ทํ์
import java.io.*;
import java.util.*;
public class swea์ด์ง์ํํ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int t = 1; t <= T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
bitmasking(n, m, t);
}
}
private static void bitwise(int n, int m, int t) {
for(int i = n-1; i >= 0; --i) {
if((m & (1 << i)) != (1 << i)) {
System.out.println("#"+t+" OFF");
return;
}
}
System.out.println("#"+t+" ON");
}
private static void bitmasking(int n, int m, int t) {
int val = (1 << n) - 1;
if((val & m) != val) {
System.out.println("#"+t+" OFF");
return;
}
System.out.println("#"+t+" ON");
}
}
โพ ๋นํธ๋ฅผ ์ด์ฉํ ๋ถ๋ถ ์งํฉ ์์ฑ
- ์์ ์์ ํด๋นํ๋ N๊ฐ์ ๋นํธ๋ฅผ ์ด์ฉ
- n๋ฒ์งธ ๋นํธ ๊ฐ์ด 1์ด๋ฉด n๋ฒ์งธ ์์ ํฌํจ ์๋ฏธ
public class ๋นํธ์ฐ์ฐ์_๋ถ๋ถ์งํฉ {
public static void main(String[] args) {
char[] data = {'A', 'B', 'C', 'D'};
printSubSet(data, 4);
}
private static void printSubSet(char[] data, int n) {
for(int i = 0; i < (1<<n); ++i) {
System.out.print("( ");
for(int j = 0; j < n; ++j) {
if((i & (1<<j)) == (1<<j))
System.out.print(data[j] + " ");
}
System.out.print(")");
System.out.println();
}
}
}
// ์ถ๋ ฅ
( )
( A )
( B )
( A B )
( C )
( A C)
( B C )
( A B C )
( D )
( A D )
( B D )
( A B D )
( C D )
( A C D )
( B C D )
( A B C D )