c 언어에서 비트 연산으로 덧셈 기술 소개

2418 단어
비트 연산으로 덧셈을 실현하는 것은 바로 컴퓨터가 2진법으로 연산을 하는 것이다. 32비트의 CPU는 32비트 내의 수만 표시할 수 있다. 여기서 먼저 1비트의 덧셈으로 진행한다. 진위를 고려하지 않는 토대에서 다음과 같다.
 
  
1 + 1 = 0
1 + 0 = 1
0 + 1 = 1
0 + 0 = 0

분명히 이 몇 가지 표현식은 비트 연산의'^'로 대체할 수 있다. 아래와 같다.
 
  
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

이렇게 해서 우리는 간단한 한 자릿수 덧셈을 완성했다. 그러면 두 자릿수 덧셈을 해야 한다. 이 방법은 실행할 수 있을까?틀림없이 안 될 것이다. 모순은 바로 어떻게 가는가에 있다
진입을 가져오시겠습니까?진위를 얻으려면 다음과 같이 생각할 수 있다.
 
  
0 + 0 = 0
1 + 0 = 0
0 + 1 = 0
1 + 1 = 1

//각도를 바꾸어 보면 이렇다
 
  
0 & 0 =
1 & 0 =
0 & 1 =
1 & 1 =

마침 위치 연산 중입니다.
 
  
// :
(x&y)<<1

여기까지 우리는 기본적으로 이런 두 가지 표현식을 가지고 있다
 
  
x^y //
(x&y)<<1 //

우리 두 자릿수 덧셈을 해서 진위를 고려하지 않는 상황에서
 
  
11+01 = 100 //
//
11 ^ 01 = 10
(11 & 01) << 1 = 10
// 10 + 10 = 100
// , ,
10 ^ 10 = 00
(10 & 10) << 1 = 100

여기에 와서 기본적으로 결론을 얻었다. 사실 뒤에 있는 그'00'은 더 이상 계산할 필요가 없다. 왜냐하면 첫 번째 표현식은 이미 결과를 계산했기 때문이다.
계속 추리하면 세 자릿수의 덧셈을 얻어낼 수 있다. 세 번만 반복해서 계산하면 첫 번째 표현식의 값이 바로 계산된 결과이다.
c 코드는 다음과 같습니다.
 
  
int Add(int a,int b)
{
int jw=a&b;
int jg=a^b;
while(jw)
{
int t_a=jg;
int t_b=jw<<1;
jw=t_a&t_b;
jg=t_a^t_b;
}
return jg;
}

컴퓨터의 본질은 2진 연산이다. 많은 고인과 천서들이 비트 연산으로 사람을 괴롭히면서도 놀라게 하는 일을 어떻게 실현하는지 보여 준다.콩판에서 한 편의 일지에서 어떻게 비트 연산으로 곱셈을 실현하는지 묘사하였는데, 사실 문제 해결의 관건은 어떻게 비트 연산으로 덧셈을 실현하는가이다.원문의 서술이 정확하지 않다고 생각되어 지금 총괄하면 다음과 같다.
정리1: a, b를 두 개의 이진수로 설정하면 a+b=a^b+(a&b)<<1.
증명:a^b는 진위를 고려하지 않을 때 덧셈 결과입니다.2진법이 동시에 1일 때만 진위가 있기 때문에 (a&b)<<<1은 진위가 발생하는 값으로 진위 보상이라고 한다.양자를 더하면 완전한 덧셈의 결과다.
정리2: 정리1을 사용하면 비트 연산만으로 가산 연산을 실현할 수 있다.
증명: 정리1의 등식을 이용하여 끊임없이 자신을 교체한다.매번 교체할 때마다 진위 보상 오른쪽에 0이 많기 때문에 최대 가수 2진법 길이의 교체가 필요하고 진위 보상은 0이 되며 이때 연산이 끝난다.

좋은 웹페이지 즐겨찾기