728x90
728x90
SMALL
- 주의 사항
ο C++은 제곱 연산자가 없다.
ο x^2는 잘못된 것.
■ ^는 비트 연산자에서 XOR이다.
이진수 -> 십진수 변환
01011110 = 0×2$^7$ + 1×2$^6$ + 0×2$^5$ + 1×2$^4$ + 1×2$^3$ + 1×2$^2$ +1×2$^1$ + 0×2$^0$
= 64 + 16 + 8 + 4 + 2
∴01011110=94
십진수 -> 이진수 변환
148=10010100
첫 번째 방법
- 몫이 0이 될 때까지 몫을 2 로 계속 나누는 행위를 반복한다.
- 매 나눗셈마다 도출 된 나머지를 역순으로 출력하면 이진수 완성 !
두 번째 방법
- num보다 작거나 같은 2의 제곱들 中 가장 큰 수 찾기
ο 이를 X라고 하겠다. 2^n = X
■ num = 128, X = 128, n = 7 - num ≥ X 비교한다.
ο true면
1. 1 출력
2. num = num - X
■ 148 - 128 = 20
3. n = n - 1
4. X = 2^n
ο false면
1. 0 출력
2. n = n - 1
3. X = 2^n - X = 0 이 될 때까지 2. 을 반복한다.
ο 총 초기 n + 1번 반복 - input = 148 이라면 최종적으로 10010100 이 출력 될 것.
#include <iostream>
using namespace std;
int main()
{
const int input = 148; // input 값은 상수로 설정했다. 보존하기 위해.
int num = input; // num 초기값은 input값.
int x = 1, n = 0; // x, n 초기값
/* num보다 작거나 같은 2의 제곱들 中 가장 큰 수 찾기 ------------------------*/
while(true)
{
n++;
x = x * 2;
if (num < x)
{
n--;
x = x / 2;
break;
}
}
/* 최종적으로 x = 128, n = 7이 될 것 ---------------------------------------*/
for(int i = 1; i <= n + 1; i++) // n + 1 번 반복
{
if (num >= x)
{
cout << 1 ; // 1 출력
num = num - x; // 이에 경우 num값 업데이트
x = x / 2;
}
else
{
cout << 0; // 0 출력
x = x / 2;
}
}
cout << endl;
return 0;
}
이진수끼리의 덧셈
음의 십진수 -> 음의 이진수 변환
- 절대값 취하기
ο -5 의 절대값 5 - 이진수로 변환하기
ο 5 의 이진수 = 00000101 - 보수 취하기
ο 11111010 - 1을 더해주기
ο 11111011 이게 바로 -5 의 이진수
■ 1 을 더해주는 이유는 0이 +0, -0 두가지로 표현되는 것을 막기 위해서
ο +0 → 00000000
■ 1 더해서 다 밀어주고
ο -0 → 11111111
■ 1 더해서 -0을 하나밖에 없는 진짜 0으로 만든다. 0을 1개만 존재하게 하기 위하여.
음의 이진수 -> 음의 십진수 변환
- 1을 빼주기
ο 11111011 - 00000001 = 11111010 - 보수 취하기
ο 11111010 의 보수 → 00000101
ο 1~2번까지는 양의 이진수로 변환하는 과정 - 십진수로 변환하기
ο 00000101 = 14 + 11 = 5 - sign 비트 고려하여 - 붙여주기
ο -5
signed Vs. unsigned
10011110
- signed → -98
ο signed 비트이므로 맨 앞 비트 1개는 부호를 뜻한다.
ο 1이므로 음수.
ο 음의 이진수 → 음의 십진수 방식대로 변환해주어야 한다. - unsigned → 158
ο signed 비트이므로 sign비트는 존재하지 않는다.
ο 그냥 10011110 = 128 + 32 + 16 + 8 + 4 + 2 = 158 - 이렇게 같은 이진수라도 signed냐 unsigned냐에 따라 값이 다르다.
728x90
300x250
LIST
'C │ C++ │ C# > C++' 카테고리의 다른 글
C++ Chapter 4.1 : 지역 변수, 범위, 지속 기간 (0) | 2023.08.18 |
---|---|
C++ Chapter 3.3 : 비트끼리의 연산, 비트 플래그, 비트 마스크 (0) | 2023.08.17 |
C++ Chapter 3.1 : 연산자 종류 정리 (0) | 2023.08.16 |
C++ Chapter 2.7 : 리터럴 상수, 심볼릭 상수 (0) | 2023.08.16 |
C++ Chapter 2.6 : 문자형 char type (0) | 2023.08.15 |