c 언어에서 비트 연산으로 덧셈 기술 소개
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이 되며 이때 연산이 끝난다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.