File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ '''
2+ # ๋นํธ ์ฐ์ฐ Bit Manipulation
3+
4+ ## ์ด์ง์ ๋ง์
binary addition
5+
6+ ์ด์ง์์์ ๋ ๋นํธ๋ฅผ ๋ํ๊ธฐ
7+
8+ 1. XOR: ์ฌ๋ฆผ์๋ฅผ ์ ์ธํ ํฉ
9+ 2. AND << 1: ์ฌ๋ฆผ์๋ฅผ ๊ณ์ฐ
10+ 3. 1~2๋ฅผ carry๊ฐ 0์ผ ๋๊น์ง ๋ฐ๋ณต
11+
12+ ```
13+ while b:
14+ carry = (a & b) << 1 # ์ฌ๋ฆผ์๋ฅผ ๊ณ์ฐ
15+ a = (a ^ b) # ํฉ
16+ b = carry # ์บ๋ฆฌ๊ฐ ๋จ์์๋ค๋ฉด ๊ณ์ ๊ณ์ฐ
17+ ```
18+
19+ ## 32๋นํธ ์ค๋ฒํ๋ก์ฐ ์ ๊ฑฐ
20+
21+ - 0xFFFFFFFF๋ ๋ชจ๋ ๋นํธ๊ฐ 1์
๋๋ค.
22+
23+ Python์ int๋ ํฌ๊ธฐ ์ ํ์ด ์์ด์ ์ฐ์ฐ ์ค ๋นํธ ์๊ฐ ์๋ ํ์ฅ๋ฉ๋๋ค.
24+ MASK(0xFFFFFFFF)์ and ์ฐ์ฐ์ ์ฌ์ฉํด 32๋นํธ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
25+
26+ ```
27+ MASK = 0xFFFFFFFF
28+ a = (a ^ b) & MASK # 32๋นํธ๊ฐ ๋์ด๊ฐ๋ฉด ์ด๊ณผ ๋นํธ๊ฐ ์ ๊ฑฐ๋จ
29+ b = carry & MASK
30+ ```
31+
32+ ## ์์ ์ฒ๋ฆฌ
33+
34+ - 0x7FFFFFFF(2147483647) ์ดํ๋ ์์(Positive Number).
35+ - 0x80000000(2147483648) ์ด์์ด๋ฉด ์์(Negative Number)
36+
37+ `a > MAX_INT(0x7FFFFFFF)`์ธ ๊ฒฝ์ฐ, 32๋นํธ ํ๊ฒฝ์์ ์์ ๊ฐ์์ ์๋ฏธํฉ๋๋ค.
38+
39+ ```
40+ ~(a ^ MASK) # 32๋นํธ ์์ ๋ณํ
41+ ```
42+ '''
43+ class Solution :
44+ def getSum (self , a : int , b : int ) -> int :
45+ MASK = 0xFFFFFFFF
46+ MAX_INT = 0x7FFFFFFF
47+
48+ while b :
49+ carry = (a & b ) << 1
50+ a = (a ^ b ) & MASK
51+ b = carry & MASK
52+
53+ return a if a <= MAX_INT else ~ (a ^ MASK ) # a๊ฐ MAX_INT๋ณด๋ค ํฌ๋ฉด 32๋นํธ ํ๊ฒฝ์์ ์์์ด๋ฏ๋ก ๋ณํ
You canโt perform that action at this time.
0 commit comments