컴퓨터의 곱셈과 나눗셈
곱셈과 나눗셈
흔히 볼 수 있는 오해로서, 사람들은 일반적으로 컴퓨터의 곱셈은 덧셈 순환을 통해 이루어진다고 생각하지만, 결코 그렇지 않다.
값은 모두 2진법이기 때문에 덧셈이라면 0010+001=0100과 같은 계산이다. 예를 들어 4\times2의 계산
0100+0100=1000=8
이렇게 하나하나 보충하면서 하면 이런 인코더가 실현되지 않는다.자세히 보면 4의 2진수 0100과 8의 2진수 1000이면 1의 위치가 왼쪽으로 1자리 이동한다.이렇게 n위가 이동할 때 곱셈을 2^n이라고 하고 이 계산을 이위 연산이라고 한다.컴퓨터는 이 이위 연산을 사용하여 곱셈과 나눗셈을 계산한다.
또 다른 예는 8\times4의 계산을 잿더미풍으로 설정하는 것이다
1000+1000+1000+1000=00100000=32
.이것도 8의 이진수를 000001000으로 고려하면 2위를 이동하고 2^2=4=곱셈이 성립된다.무엇이 이위 연산입니까?
변위 연산에는 논리적 변위와 산술 변위 두 가지 연산이 있다.
논리적 오프셋
논리적 이동은 위에서 계산한 바와 같이 레지스터의 모든 위치를 왼쪽, 오른쪽으로 이동하는 연산이다.빈 가장자리로 이동하여 0을 입력합니다.
위에서 소개한 위치 이동 연산은 이 논리적 위치의 왼쪽 이동이라고 하고 왼쪽 n위치 이동은 2^n배이다.이것을 사용하여 곱셈 연산을 하다.제법은 오른쪽으로 이동하는 것으로 불리며, 오른쪽으로 n위를 이동하면 2^{-n}를 곱한다.
산술 이위
산술적 위치 이동과 논리적 위치 이동이 다르기 때문에 기호를 고려한다.레지스터에서 왼쪽의 위치가 1이면 마이너스, 0이면 정수를 나타낸다.산술 연산은 기호의 위치를 보존하는 상황에서 모든 다른 위치를 논리적 위치와 동일하게 이동하는 것이다.
논리를 바꿔보도록 하겠습니다.
이로써 위치 이동 연산을 간단하게 설명하고 논리적 위치 이동을 사용하여 계산해 보았다.산술 이동에 관해서는 논리적 편이와 계산 방법이 비슷하기 때문에 계산하지 않는다.
질문 1
32ビットのレジスタに16進数A6E2が入っている。これを3ビット右に論理シフトした値を16進数で求めよ
2진법으로 문제를 표시하는 레지스터0000 0000 0000 0000 1010(←A) 0110(←6) 1110(←E) 0010(←2)
.여기서부터 오른쪽으로 3자리 이동하는 논리적 편이, 즉 모든 3개의 수치가 오른쪽으로 이동하는 것이다.자리 옮긴 값0000 0000 0000 0000 0001 0100 1101 1100
이 16진수로 수정된 경우0001=2^3\times0+2^2\times0+2^1\times0+2^0\times1=1
0100=2^3\times0+2^2\times1+2^1\times0+2^0\times0=4
1101=2^3\times1+2^2\times1+2^1\times0+2^0\times1=13=D
1100=2^3\times1+2^2\times1+2^1\times0+2^0\times0=12=C
따라서 정답은 14DC입니다.
질문 2
レジスタに格納されている正の整数xを10倍にする処理を以下から選べ。この時桁が溢れることはない。
1. xを2ビット左にシフトした値にxを加算し、更に1ビット左にシフトする
2. xを2ビット左にシフトした値にxを加算し、更に2ビット左にシフトする
3. xを3ビット左にシフトした値と、xを2ビット左にシフトした値を加算する
4. xを3ビット左にシフトした値にxを加算し、更に1ビット左にシフトする
비트 넘침은 위치 이동 연산 과정에서 1위가 한쪽에서 새는 것을 말한다.위와 같은 이위 연산에 대한 전제 지식이 있다면 공식을 만들어 계산하면 답을 간단하게 알 수 있다.
선택 항목 1
x를 두 자리로 왼쪽으로 옮기면 값이 2^2배라는 뜻이다.그리고 이 값에 x(+x)를 더해서 왼쪽으로 1위 이동하면 2^1배의 결과를 찾아보면 10배인지 아닌지 알 수 있다.
x'=(x\times2^2+x)\times2^1=5x\times2=10x
보시다시피 1을 선택하는 것은 10배입니다.시험 등 풀이를 할 때는 이대로 다음 문제로 옮겨도 문제없지만 다른 선택문제부터 계산해 보자.
선택 항목 2
x'=(x\times2^2+x)\times2^2=5x\times4=20x
선택 항목 3
x'=x\times2^3+x\times2^2=8x+4x=12x
선택 항목 4
x'=(x\times2^3+x)\times2^1=9x\times2=18x
질문
以下の16ビットの固定小数点レジスタの内容を3ビット論理左シフトしたものをa、2ビット論理右シフトしたものをbとした時、aがbの何倍になるのか求めよ。
0000 0100 1011 1000
3위 논리 왼쪽 이동의 a는0010 0101 1100 0000
, 2위 논리 오른쪽 이동의 b는0000 0001 0010 1110
이다.이 문제는 비트 넘침이 발생하지 않기 때문에 단순히 a는 원래 레지스터의 내용보다 2^3배, b는 2^{-2}배의 값이 증가한 것으로 간주한다.이때 비교하고 싶은 것은 a와 b입니다. 원래 레지스터의 내용을 x로 설정하면\frac{a}{b}=\frac{2^3x}{\frac{x}{2^2}}=\frac{2^3x\times2^2}{x}=2^5=32
따라서 a는 b의 32배이다.
상쇄하다
컴퓨터의 덧셈은 조합 논리 연산자를 통해 실현된 것이다.구체적으로 다음과 같은 논리 회로를 통해 계산한다.
덧셈이라면 컴퓨터는 쉽게 계산할 수 있지만 뺄셈은 좀 복잡하다.롤링 조건에 부합되는 논리적 회로가 없기 때문에 덧셈 같은 회로를 구성할 수 없다.그렇다면 어떻게 감법을 실현할 것인가? 보수라는 수치를 이용하자.
보너스는'임의의 수 n을 더하면 미리 늘어나는 수량'을 말한다.10진수는 n+보너스=10의 수치이고 1의 보너스는 9, 7의 보너스는 3이다. 이렇게 보너스가 결정된다.
보너스 마이너스 를 쓰다
덧셈으로 뺄셈을 하면 불협화음을 느낄 수 있지만 덧셈으로 계산하는 것은 매우 간단하다.나는 예로 9-6을 계산해 보고 싶다.
9-6의 계산에서 부호를 구하는 n은 6(감수)이다.즉 부호화는 4인데 여기에 피감수(뺀 수)와 부호화를 더하자.
9+4=13
이 13위를 주목한다면 3...원래 마이너스와 같은 답안을 얻다니.피감수와 보수를 더해 가장 높은 자리를 제거하는 방법으로 컴퓨터의 감법을 계산한다.감동하다어, 그런데 부호 수정은 어떻게 안내하나요?
똑똑한 사람은 상술한 방법으로 감법 연산을 하는데 원래 보수를 찾기 위해 감법을 사용하면 의미가 없다는 것을 알아야 한다.아무래도 액세서리 가동 문제, 계란 같은 문제라고 생각했지만 실제로는 기계처리를 통해 2진수로 해결됐다.
우선 보수의 대상 x를 4로 계산한다.이 4를 2진법으로 표시하면 0100입니다.2진수 반전 후의 위치를 1로 더하면 보너스가 나온다계산해봐. 확인해봐.
1011+1=1100
1001을 10진수로 환산하면 12다. 원래 4의 보수는 6이어야 하기 때문에 틀린 것 같지만 이 6을 2의 보수라고 하는데 2진수로 계산한 토대에서 x와 덧붙여도 중복되지 않는 최대수다.지금까지 이 부가 장에서 사용된 부호화는 10진법이고 10진법의 부호화라는 것이다.10진법의 2진법으로 부호를 보충해도 순조롭게 진행될 수 없기 때문에 피감수를 8(=1000)로 하고 2진법에 4의 부호를 더하자.
1000+1100=10100
최고위의 비트가 0100=4, 10진법 계산의 8-4=4와 일치하는 것을 무시하고 덧셈만 하면 뺄셈을 실현할 수 있다.
끝맺다
나는 C 언어와 자바를 써 본 적이 없어서 실제로는 코드로 위치 이동 연산을 실현하지 않았지만 언젠가는 저층의 귀신이 되어 레지스터를 실현할 것이다.
참고 문헌
산술이위-위키백과
논리적 이동-위키백과
2의 보너스
시프트 컴퓨팅
Reference
이 문제에 관하여(컴퓨터의 곱셈과 나눗셈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kota_yata/articles/a2239a6a8409c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)