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์
๋๋ค.