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