5. Bitwise Operators

2024. 2. 26. 23:47ใ†CS - Roadmap.sh/5. Bitwise operators

CS - 5. Bitwise Operators 

Bitwise Operators

๐Ÿ’ก Bitwise operators are used to perform operations on individual bits of a number. They are used in cryptography, image processing, and other applications.

 

๋น„ํŠธ ์—ฐ์‚ฐ์ž
๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” ์ˆซ์ž์˜ ๊ฐœ๋ณ„ ๋น„ํŠธ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๊ธฐํƒ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋น„ํŠธ ์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- AND ( & ) : ๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๋•Œ๋งŒ ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋ฉ๋‹ˆ๋‹ค.
- OR ( | ) : ๋‘ ๋น„ํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋„ 1์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋ฉ๋‹ˆ๋‹ค.
- XOR ( ^ ) : ๋‘ ๋น„ํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ๋•Œ ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋ฉ๋‹ˆ๋‹ค.
- NOT ( ~ ) : ๋น„ํŠธ ๊ฐ’์„ ๋ฐ˜์ „์‹œํ‚ต๋‹ˆ๋‹ค. ์ฆ‰, 1์€ 0์œผ๋กœ, 0์€ 1๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
- Left shift ( << ) : ์ง€์ •ํ•œ ์ˆ˜๋งŒํผ ๋น„ํŠธ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์—๋Š” 0์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.
- Right shift ( >> ) : ์ง€์ •ํ•œ ์ˆ˜๋งŒํผ ๋น„ํŠธ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ์™ผ์ชฝ์—๋Š” ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” ๋น ๋ฅธ ๊ณ„์‚ฐ์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”, ํ”Œ๋ž˜๊ทธ ์„ค์ • ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€, ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” ์ •์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋น„ํŠธ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋น„ํŠธ ์—ฐ์‚ฐ์ž์˜ ์‚ฌ์šฉ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋”ฐ๋ผ ์•ฝ๊ฐ„์”ฉ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์˜ ๋ฌธ์„œ๋‚˜ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ ๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์งˆ๋ฌธํ•ด์ฃผ์„ธ์š”.

 

 

 

# AND ์—ฐ์‚ฐ
print(5 & 3)  # ์ถœ๋ ฅ: 1

# OR ์—ฐ์‚ฐ
print(5 | 3)  # ์ถœ๋ ฅ: 7

# XOR ์—ฐ์‚ฐ
print(5 ^ 3)  # ์ถœ๋ ฅ: 6

# NOT ์—ฐ์‚ฐ
print(~5)  # ์ถœ๋ ฅ: -6

 

 AND ์—ฐ์‚ฐ
print(5 & 3) # ์ถœ๋ ฅ: 7

5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101, 3์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 011 ์ž…๋‹ˆ๋‹ค.
๋‘ ์ˆ˜๋ฅผ AND ์—ฐ์‚ฐํ•˜๋ฉด 001์ด๋ฏ€๋กœ, 10์ง„์ˆ˜๋กœ๋Š” 1์ž…๋‹ˆ๋‹ค.

 


 OR ์—ฐ์‚ฐ
print(5 | 3)  # ์ถœ๋ ฅ: 7

OR ์—ฐ์‚ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101, 3์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 011 ์ž…๋‹ˆ๋‹ค.
๋‘ ์ˆ˜๋ฅผ OR ์—ฐ์‚ฐํ•˜๋ฉด 111์ด๋ฏ€๋กœ, 10์ง„์ˆ˜๋กœ๋Š” 7์ž…๋‹ˆ๋‹ค.


 XOR ์—ฐ์‚ฐ
print(5 ^ 3)  # ์ถœ๋ ฅ: 6

5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101, 3์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 011 ์ž…๋‹ˆ๋‹ค.
๋‘ ์ˆ˜๋ฅผ XOR ์—ฐ์‚ฐํ•˜๋ฉด 110์ด๋ฏ€๋กœ, 10์ง„์ˆ˜๋กœ๋Š” 6์ž…๋‹ˆ๋‹ค.

 


 NOT ์—ฐ์‚ฐ
print(~5)  # ์ถœ๋ ฅ: -6

5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101 ์ž…๋‹ˆ๋‹ค.
์ด ์ˆ˜๋ฅผ NOT ์—ฐ์‚ฐํ•˜๋ฉด 010์ด ๋˜๋Š”๋ฐ, ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ณด์ˆ˜๋ฅผ ์ทจํ•œ ํ›„ -1์„ ๋”ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ 10์ง„์ˆ˜๋กœ๋Š” -6์ž…๋‹ˆ๋‹ค.

 

 

# Left shift ์—ฐ์‚ฐ
print(5 << 2)  # ์ถœ๋ ฅ: 20


# Right shift ์—ฐ์‚ฐ
print(5 >> 1)  # ์ถœ๋ ฅ: 2

 

 

 Left shift ์—ฐ์‚ฐ
print(5 << 2)  # ์ถœ๋ ฅ: 20


5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101 ์ž…๋‹ˆ๋‹ค.
์ด ์ˆ˜๋ฅผ 2๋งŒํผ ์™ผ์ชฝ์œผ๋กœ shiftํ•˜๋ฉด 10100์ด๋ฏ€๋กœ, 10์ง„์ˆ˜๋กœ๋Š” 20์ž…๋‹ˆ๋‹ค.

 


 Right shift ์—ฐ์‚ฐ
print(5 >> 1)  # ์ถœ๋ ฅ: 2


5๋ฅผ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101 ์ž…๋‹ˆ๋‹ค.
์ด ์ˆ˜๋ฅผ 1๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ shiftํ•˜๋ฉด 10์ด๋ฏ€๋กœ, 10์ง„์ˆ˜๋กœ๋Š” 2์ž…๋‹ˆ๋‹ค.

 

 

728x90