# 1059 : [๊ธฐ์ด-๋นํธ๋จ์๋ ผ๋ฆฌ์ฐ์ฐ] ๋นํธ๋จ์๋ก NOT ํ์ฌ ์ถ๋ ฅํ๊ธฐ
๋ฌธ์ ์ค๋ช
์
๋ ฅ๋ ์ ์๋ฅผ ๋นํธ๋จ์๋ก ์ฐธ/๊ฑฐ์ง์ ๋ฐ๊พผ ํ ์ ์๋ก ์ถ๋ ฅํด ๋ณด์.
๋นํธ๋จ์(bitwise) ์ฐ์ฐ์ ~ ๋ฅผ ๋ถ์ด๋ฉด ๋๋ค.(~ : tilde, ํธ๋๋ผ๊ณ ์ฝ๋๋ค.)
** ๋นํธ๋จ์(bitwise) ์ฐ์ฐ์๋,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)
๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด 1์ด ์
๋ ฅ๋์์ ๋ ์ ์ฅ๋๋ 1์ 32๋นํธ 2์ง์๋ก ํํํ๋ฉด
00000000 00000000 00000000 00000001์ด๊ณ ,
~1์ 11111111 11111111 11111111 11111110์ด ๋๋๋ฐ ์ด๋ -2๋ฅผ ์๋ฏธํ๋ค.
์์
int a=1;
printf("%d", ~a); //-2๊ฐ ์ถ๋ ฅ๋๋ค.
์ฐธ๊ณ
์ปดํจํฐ์ ์ ์ฅ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ 2์ง์ ํํ๋ก ๋ฐ๋์ด ์ ์ฅ๋๋ค.
0๊ณผ 1๋ก๋ง ๊ตฌ์ฑ๋๋ ๋นํธ๋จ์๋ค๋ก ๋ณํ๋์ด ์ ์ฅ๋๋๋ฐ,
์์ ์ ์๋ 2์ง์ ํํ๋ก ๋ฐ๋์ด ์ ์ฅ๋๊ณ ,
์์ ์ ์๋ "2์ ๋ณด์ ํํ"๋ฐฉ๋ฒ์ผ๋ก ์ ์ฅ๋๋ค.
์๋ฅผ ๋ค์ด intํ(4๋ฐ์ดํธ(byte), 32๋นํธ)์ผ๋ก ์ ์ธ๋ ๋ณ์์ ์์ ์ ์ 5๋ฅผ ์ ์ฅํ๋ฉด
5์ 2์ง์ ํํ์ธ 101์ด 32๋นํธ๋ก ๋ง๋ค์ด์ ธ
00000000 00000000 00000000 00000101
๋ก ์ ์ฅ๋๋ค.(๊ณต๋ฐฑ์ ๋ณด๊ธฐ ํธํ๋๋ก ์์๋ก ๋ถ๋ฆฌ)
int ํ์ ์ ์ 0์
00000000 00000000 00000000 00000000
๊ทธ๋ฆฌ๊ณ -1์ 0์์ 1์ ๋ ๋นผ๊ณ 32๋นํธ๋ง ํ์ํ๋ ํํ๋ก
11111111 11111111 11111111 11111111๋ก ์ ์ฅ๋๋ค.
-2๋ -1์์ 1์ ๋ ๋นผ๋ฉด ๋๋ค.
11111111 11111111 11111111 11111110๋ก ์ ์ฅ๋๋ค.
๊ทธ๋์ int ํ์ผ๋ก ์ ์ธ๋ ๋ณ์์๋ ์ต์ -2147483648์ ์๋ฏธํ๋
10000000 00000000 00000000 00000000๋ถํฐ
์ต๋ +2147483647์ ์๋ฏธํ๋
01111111 11111111 11111111 11111111๋ก ์ ์ฅ๋ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด -2147483648
10000000 00000000 00000000 00000000์์ 1์ ๋ ๋บ๋ค๋ฉด?
01111111 11111111 11111111 11111111 ์ด ๋๋ค.
์ฆ -2147483649๊ฐ ์๋ +2147483647 ์ด ๋๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ฒ์ ์ค๋ฒํ๋ก์ฐ(overflow, ๋์นจ)๋ผ๊ณ ํ๋ค.
์ด๋ฌํ ๋ด์ฉ์ ๊ฐ๋จํ ํ์ํ๋ฉด, ์ ์ n์ด๋ผ๊ณ ํ ๋,
~n = -n - 1
-n = ~n + 1๊ณผ ๊ฐ์ ๊ด๊ณ๋ก ํํ๋๋ค.
์ด ๊ด๊ณ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณด๋ฉด ๋ง์น ์ํ์ผ๋ก ์๋ค์ด
์๋์ ์ผ๋ก ๋ฐฐ์น๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ ๋ ฅ
์ ์ 1๊ฐ๊ฐ ์
๋ ฅ๋๋ค.
-2147483648 ~ +2147483647
์ถ๋ ฅ
๋นํธ ๋จ์๋ก 1 -> 0, 0 -> 1๋ก ๋ฐ๊พผ ํ ๊ทธ ๊ฐ์ 10์ง์๋ก ์ถ๋ ฅํ๋ค.
์ ๋ ฅ ์์
2
์ถ๋ ฅ ์์
-3
๋ฌธ์ ํ์ด
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d",~n);
return 0;
}
#1060 : [๊ธฐ์ด-๋นํธ๋จ์๋ ผ๋ฆฌ์ฐ์ฐ] ๋นํธ๋จ์๋ก AND ํ์ฌ ์ถ๋ ฅํ๊ธฐ
๋ฌธ์ ์ค๋ช
์
๋ ฅ๋ ์ ์ ๋ ๊ฐ๋ฅผ ๋นํธ๋จ์๋ก and ์ฐ์ฐํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์๋ก ์ถ๋ ฅํด ๋ณด์.
๋นํธ๋จ์(bitwise) ์ฐ์ฐ์ &๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.(and, ampersand, ์ฐํผ์ผ๋๋ผ๊ณ ์ฝ๋๋ค.)
** ๋นํธ๋จ์(bitwise) ์ฐ์ฐ์๋,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)
๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด 3๊ณผ 5๊ฐ ์
๋ ฅ๋์์ ๋๋ฅผ ์ดํด๋ณด๋ฉด
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001
์ด ๋๋ค.
๋นํธ๋จ์ and ์ฐ์ฐ์ ๋ ๋นํธ์ด์ด ์ฃผ์ด์ก์ ๋,
๋ ๋ค 1์ธ ๋ถ๋ถ์ ์๋ฆฌ๋ง 1๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด ์ฐ์ฐ์ ์ด์ฉํ๋ฉด ์ด๋ค ๋นํธ์ด์ ํน์ ๋ถ๋ถ๋ง ๋ชจ๋ 0์ผ๋ก๋ ๋ง๋ค ์ ์๋๋ฐ
192.168.0.31 : 11000000.10101000.00000000.00011111
255.255.255.0 : 11111111.11111111.11111111.00000000
๋ ๊ฐ์ ip ์ฃผ์๋ฅผ & ์ฐ์ฐํ๋ฉด
192.168.0.0 : 110000000.10101000.0000000.00000000์ ๊ณ์ฐํ ์ ์๋ค.
์ค์ ๋ก ์ด ๊ณ์ฐ์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ ๊ฐ์ ์ปดํจํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด
๊ฐ์ ๋คํธ์ํฌ์ ์๋์ง ์๋์ง๋ฅผ ํ๋จํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ด๋ฌํ ๋นํธ๋จ์ ์ฐ์ฐ์ ๋น ๋ฅธ ๊ณ์ฐ์ด ํ์ํ ๊ทธ๋ํฝ์ฒ๋ฆฌ์์
๋ง์คํฌ์ฐ์ฐ(ํน์ ๋ถ๋ถ์ ๊ฐ๋ฆฌ๊ณ ์ถ๋ ฅํ๋)์ ์ํํ๋ ๋ฐ์๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ ๋ ฅ
์ ์ 1๊ฐ๊ฐ ์
๋ ฅ๋๋ค.
-2147483648 ~ +2147483647
์ถ๋ ฅ
๋ ์ ์๋ฅผ ๋นํธ๋จ์(bitwise)๋ก and ๊ณ์ฐ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ 10์ง์๋ก ์ถ๋ ฅํ๋ค.
์ ๋ ฅ ์์
3 5
์ถ๋ ฅ ์์
1
๋ฌธ์ ํ์ด
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d",&a,&b);
printf("%d",a&b);
return 0;
}
#1061 : [๊ธฐ์ด-๋นํธ๋จ์๋ ผ๋ฆฌ์ฐ์ฐ] ๋นํธ๋จ์๋ก OR ํ์ฌ ์ถ๋ ฅํ๊ธฐ
๋ฌธ์ ์ค๋ช
์
๋ ฅ๋ ์ ์ ๋ ๊ฐ๋ฅผ ๋นํธ๋จ์๋ก or ์ฐ์ฐํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์๋ก ์ถ๋ ฅํด ๋ณด์.
๋นํธ๋จ์(bitwise) ์ฐ์ฐ์ |(or, vertical bar, ๋ฒํฐ์ปฌ๋ฐ)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
** | ์ ํ์ดํ(pipe) ์ฐ์ฐ์๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
** ๋นํธ๋จ์(bitwise) ์ฐ์ฐ์๋,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)
๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด 3๊ณผ 5๊ฐ ์
๋ ฅ๋์์ ๋๋ฅผ ์ดํด๋ณด๋ฉด
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
์ด ๋๋ค.
๋นํธ๋จ์ or ์ฐ์ฐ์ ๋ ์ค ํ๋๋ผ๋ 1์ธ ์๋ฆฌ๋ฅผ 1๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด๋ฌํ ๋นํธ๋จ์ ์ฐ์ฐ์ ๋น ๋ฅธ ๊ณ์ฐ์ด ํ์ํ ๊ทธ๋ํฝ์ฒ๋ฆฌ์์๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ ๋ ฅ
2๊ฐ์ ์ ์๊ฐ ๊ณต๋ฐฑ์ ๋๊ณ ์
๋ ฅ๋๋ค.
-2147483648 ~ +2147483647
์ถ๋ ฅ
๋ ์ ์๋ฅผ ๋นํธ๋จ์(bitwise)๋ก or ๊ณ์ฐ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ 10์ง์๋ก ์ถ๋ ฅํ๋ค.
์ ๋ ฅ ์์
3 5
์ถ๋ ฅ ์์
7
๋ฌธ์ ํ์ด
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d",&a,&b);
printf("%d",a|b);
return 0;
}
#1062 : [๊ธฐ์ด-๋นํธ๋จ์๋ ผ๋ฆฌ์ฐ์ฐ] ๋นํธ๋จ์๋ก XOR ํ์ฌ ์ถ๋ ฅํ๊ธฐ
๋ฌธ์ ์ค๋ช
์
๋ ฅ๋ ์ ์ ๋ ๊ฐ๋ฅผ ๋นํธ๋จ์๋ก xor ์ฐ์ฐํ ํ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์๋ก ์ถ๋ ฅํด ๋ณด์.
๋นํธ๋จ์(bitwise) ์ฐ์ฐ์ ^(xor, circumflex/caret, ์์ปดํ๋ ์ค/์นด๋ฆฟ)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
** ์ฃผ์ ^์ ์ํ์์์ ๊ฑฐ๋ญ์ ๊ณฑ(power)์ ๋ํ๋ด๋ ๊ธฐํธ์ ๋ชจ์์ ๊ฐ์ง๋ง,
C์ธ์ด์์๋ ์ ํ ๋ค๋ฅธ ๋ฐฐํ์ ๋
ผ๋ฆฌํฉ(xor, ์๋ก ๋ค๋ฅผ ๋ 1)์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์๋ฅผ ๋ค์ด 3๊ณผ 5๊ฐ ์
๋ ฅ๋์์ ๋๋ฅผ ์ดํด๋ณด๋ฉด
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
์ด ๋๋ค.
์ด๋ฌํ ๋นํธ๋จ์ ์ฐ์ฐ์ ๋น ๋ฅธ ๊ณ์ฐ์ด ํ์ํ ๊ทธ๋ํฝ์ฒ๋ฆฌ์์๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช
ํ์๋ฉด,
๋ ์ฅ์ ์ด๋ฏธ์ง๊ฐ ๊ฒน์ณ์ก์ ๋ ์์ด ์๋ก ๋ค๋ฅธ ๋ถ๋ถ๋ง ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฐฐ๊ฒฝ์ด ๋๋ ๊ทธ๋ฆผ๊ณผ ๋ฐฐ๊ฒฝ ์์์ ์์ง์ด๋ ๊ทธ๋ฆผ์ด ์์ ๋,
๋ ๊ทธ๋ฆผ์์ ์ฐจ์ด๋ง ๊ณจ๋ผ๋ด ๋ฐฐ๊ฒฝ ์์์ ์์ง์ด๋ ๊ทธ๋ฆผ์ ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด
์ ์ฒด ๊ทธ๋ฆผ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ์ ๋ค์ ์์ ๋ค์ ๊ณ์ฐํด ์
ํ์ง ์๊ณ
๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ๊ทธ๋ฆผ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋นํ๊ธฐ ์ํ
๊ฒ์ ๋ฑ์ ์์ํด ๋ณด๋ฉด ๋๋ค.
์ ๋ ฅ
2๊ฐ์ ์ ์๊ฐ ๊ณต๋ฐฑ์ ๋๊ณ ์
๋ ฅ๋๋ค.
-2147483648 ~ +2147483647
์ถ๋ ฅ
๋ ์ ์๋ฅผ ๋นํธ๋จ์(bitwise)๋ก xor ๊ณ์ฐ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ 10์ง์๋ก ์ถ๋ ฅํ๋ค.
์ ๋ ฅ ์์
3 5
์ถ๋ ฅ ์์
6
๋ฌธ์ ํ์ด
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d",&a,&b);
printf("%d",a^b);
return 0;
}