728x90

# 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;
}

+ Recent posts