O.4 Converting between binary and decimal

주홍영·2022년 3월 12일
0

Learncpp.com

목록 보기
59/199

https://www.learncpp.com/cpp-tutorial/converting-between-binary-and-decimal/

10진수를 2진수로 바꿀때 어떠한 방법으로 하는지

직관적으로
1011'0011 이라는 숫자가 있다고 하자
위의 숫자를 2로 나눈 몫은
1011'0011 >> 1 = 0101'1001 이고 나머지는 1 이다
이런식으로 첫번째 자리부터 2로 나누면서 나머지를 쌓아가면서
만드는 것이다
그리고 만약 몫이 0이되면 그때 종료한다

예시

148을 2진수로 표현해보자
148은 2진수로 나타내면 0b1001'0100 이다
앞서 말했던 방법으로 148을 converting 해본다
148 / 2 = 74, 0
74 / 2 = 37, 0
37 / 2 = 18, 1
18 / 2 = 9, 0
9 /2 = 4 , 1
4 / 2 = 2 , 0
2 / 2 = 1 , 0
1 / 2 = 0 , 1
따라서 1001'0100 으로 정답이다

2's complement

signed integers는 일반적으로 2's complement로 저장된다
이 표현 법에서 left most bit는 부호를 의미한다

2's를 쓰는 가장 주된 이유는 연산에 있어서 자유롭다
2 - 1 을 하고 싶으면 2와 -1을 그냥 2's complement 형태에서 더하면 된다
2는 0010 이고 -1은 1111이다
따라서 둘을 더하면 1'0001 이고 4bit fortmat 이었으므로 5번째 비트를 생략하면
0001 즉 2-1 = 1 의 결과가 비트로도 그대로 유지된다
sign & magnitude 표현법에서는 부호가 서로 다른 경우에 매우 복잡하지만
2's complement는 이를 고려하지 않고도 자유로운 연산을 할 수 있다는 것이 장점이다

Converting decimal to binary (two’s complement)

양수면은 그냥 바꿔도 된다 (단, 양수 표현가능범위 안에 있는 경우)
음수면 절대값을 먼저 2진수로 표현하고
2진수의 보수를 구한다음에 1을 더하는 식으로 표현할 수 있다

음수의 절대값을 알고 싶을 때도 ex) 1111 (-1)
보수를 취하고 => 0000, 1을 더하면 0001 이므로 이 음수의 절대값은 1이라는 것을
유추할 수 있다
이러한 성질을 이용한다

profile
청룡동거주민

0개의 댓글