안 쓰던 블로그
컴퓨터구조-컴퓨터 정보 표현(2진수 논리연산, 1의 보수, 2의 보수) 본문
컴퓨터에서 정보 표현 단위
-비트 Bit: 컴퓨터 정보표현의 기초 단위, 2진법에서 데이터 표현하는 단위 0과 1
-바이트 Byte: 비트들로 구성됨 1byte = 8bit
-워드 Word: 바이트들로 구성됨 1word = 2Byte or 4Byte(컴퓨터 마다 다름)
진법
10진법: 인간이 사용하는 수의 체계, 0~9를 사용한다
2진법: 컴퓨터에서 사용하는 수의 체계, 0/1을 사용한다
16진법: 0~9, A,B,C~F까지 사용한다
ex) 10진수 12는 2진수로 1100이고 16진수로는 C다
10진수 20은 2진수로 0001 0100이고 16진수로는 14다
10진수 248은 2진수로 1111 1000이고 16진수로는 F8이다
10진수->부호 없는 2진수 변환
10진수 값을 2로 연속해서 나눈 나머지값을 다 이어 붙이면 2진수가 됨
ex) 10진수 53을 부호 없는 2진수 110101로 변환하는 과정
아니면 자릿수를 세는 방법도 있다
2진수는 오른쪽 끝부터 1,2,4,8,16..으로 늘어나니까
53은 1+4+16+32로 1*2^0+1*2^2+1*2^4+1*2^5니까 110101
10진수->부호 있는 2진수 변환
최상위 비트가 부호를 나타낸다(0이면 양수 1이면 음수)
1) 부호화 크기 표현
n비트로 구성된 2진수가 있으면 최상위 비트가 부호 비트, 나머지 n-1비트들은 수의 절대 크기
ex) 10진수 +9는 2진수로 (0 0001001)
10진수 -9는 2진수로 (1 0001001)
10진수 +0은 2진수로 0 0000000
10진수 -0은 2진수로 1 0000000
2) 보수를 이용한 표현
최상위 비트는 역시 부호 비트
-1의 보수 표현: 부호 없는 2진수에다가 모든 비트를 반전하고 부호 비트를 더함
-2의 보수 표현: 1의 보수한 결과값에다가 1 더함
10진수 +9는 부호 없는 2진수로 0 0001001
1의 보수를 하면(비트 반전) 1 1110110 이고 10진수 -9가 된다
2의 보수를 하면(1의 보수+1) 1 1110111 이고 10진수는 똑같이 -9다
10진수 +35는 부호 없는 2진수로 0 0100011
1의 보수를 하면(비트 반전) 1 1011100 이고 10진수 -35가 된다
2의 보수를 하면(1의 보수+1) 1 10111101 이고 10진수는 똑같이 -35다
2진수 표현 범위
2의 보수를 이용해서 3비트 이진수를 표현하면 아래와 같다
+3 = 011
+2 = 010
+1 = 001
+0 = 000
-1 = 111
-2 = 110
-3 = 101
-4 = 100
즉 표현할 수 있는 범위는 -2^(3-1) ~ +2^(3-1)-1
정리하면 n비트로 표현할 수 있는 수의 범위는 -2^(n-1) ~ +2^(n-1)-1 가 된다
부호 있는 8비트 이진수 표현
부호화 크기 표현 10000001(-2^7-1)(-1)~0111111(2^7-1)(127)
1의 보수: 11111110(-2^7-1)(-1)~01111111(2^7-1)(127)
2의 보수: 11111111(-2^7)(-1)~01111111(2^7-1)
근데 2의 보수는 음수 0이 없어서 표현 가능한 음수 개수가 1의 보수보다 1개 더 많다
색깔 부분은 오버플로우가 난 곳인데, n비트 데이터가 표현할 수 있는 범위를 넘는 수에 접근하려고 하면 반대쪽 끝 값이 임의로 출력된다
2진수의 논리 연산
1. 기본 논리 연산
-AND연산: 모든 입력값이 모두 1인경우 1, 아니면 0
-OR연산: 모든 입력값 중 하나라도 1인 경우 1, 두 입력값이 모두 0일 경우만 0
-Exclusive-OR(XOR)연산: 모든 입력값이 모두 동일한 경우에 0, 아니면 1
-NOT 연산: 주어진 입력값의 반대값이 결과값
2. 응용 논리 연산
-Selective-set(선택적 세트) 연산
선택된 특정 비트를 1로 만드는 OR연산을 한다
ex 입력값 A의 하위 4비트를 모두 1로 만든다
-Selective-complement(선택적 보수) 연산
선택된 특정 비트를 1의 보수로 변경하는(비트 반전하는) 연산
ex 입력값 A의 하위 4비트 모두 비트 반전
-Mask(마스크) 연산
선택된 특정 비트들을 0으로 만드는 연산
ex 입력값 A의 상위 4비트를 모두 0으로 만든다
-Insert(삽입) 연산
입력값 내 특정 위치에 새로운 비트값들을 삽입하는 연산
ex 입력값 A의 하위 4비트에 1100을 삽입함
-Compare(비교) 연산
두 입력값을 비교하는 연산
ex 입력값 A와 B의 비트들을 비교해서, 같으면 0 출력 다르면 1출력
-Circular shift(순환 이동)
최상위 혹은 최하위에 있는 비트가 반대편 끝에 있는 비트 위치로 이동하는 식으로
비트가 회전하는 이동
순환 좌측 이동
순환 우측 이동
-Arithmetic shift(산술적 이동)
부호비트는 유지하고, 수의 크기를 나타내는 비트들만 이동
산술적 좌측 이동
산술적 우측 이동
확인 문제
1. 10진수 -4를 2의 보수로 변환하면? 4비트 기준
답: 11100
+4는 0 0100
1의 보수는 반전: 1 1011
2의 보수는 +1: 1 1100
2. 10진수 -5를 2의 보수로 변환하면? 4비트 기준
답: 11011
+5는 0 0101
1의 보수는 반전: 1 1010
2의 보수는 +1: 1 1011
3. 어떤 수와 2의 보수를 +연산하면 마이너스 연산을 할 수 있다(참고로 컴퓨터에는 마이너스 연산이 없다)
참고로 마이너스 연산을 할 때, 두 수를 +연산한 결과값이 한 자릿수가 늘어났으면 가장 왼쪽 비트를 버리고, 자릿수가 그대로라면 부호 비트 제외 2의 보수를 취한다
1번에서 계산한 -4의 2의 보수를 가지고 5 - 4 연산을 하는 과정은?
답:
5는 0 0101
-4의 2의 보수는 1 1100
0 0101
+ 1 1100
-------------
100001
한 자릿수가 늘었으므로 가장 왼쪽 비트를 날린다
1 00001->0 0001
0 0001: 1 이 나옴
4. 1번에서 계산한 -5의 2의 보수를 가지고 4 - 5 연산을 하는 과정은?
답:
4는 0 0100
-5의 2의 보수는 1 1011
0 0100
+ 1 1011
-------------
1 1111
자릿수의 변경이 일어나지 않았으므로 2의 보수 취한다
1 1111->1 0000(1의 보수, 부호 비트 제외)->1 0001(2의 보수)
1 0001: -1 이 나옴
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조-메모리 구조와 레지스터 (0) | 2020.05.24 |
---|---|
컴퓨터구조 -명령어를 효과적으로 실행하기 위한 기법 (0) | 2020.05.24 |
컴퓨터구조-어셈블리 프로그램 구조 (0) | 2020.04.18 |
컴퓨터구조-중앙처리장치(CPU) 구조, 동작 과정 (0) | 2020.04.07 |
리눅스 심볼릭 링크와 하드 링크 (1) | 2016.10.03 |