int sum3(int x, int y, int z) {
/* use XOR to combine x, y, and z, use word2 to store carry bit. */
int word1 = 0;
int word2 = 0;
word1 = (x^y) ^ z;
word2 = ( (x&y) | (x&z) | (y&z) ) << 1;
return sum(word1,word2);
}
나는 그 뒤에 "이유"를 이해하지 못합니다. 캐리 비트와 관련이 있음을 이해합니다.
편집 : 여기에 합계가 있습니다.
static int sum(int x, int y) {
return x+y;
}
그래서 거짓말을했고 결국 +를 사용 했어
정수를 추가해야하는 경우 쌍방향 XOR 연산을 수행하여 합계를 계산할 수 있습니다. 따라서 A = 0x10 = (0001 0000) bin 및 B = 0x11 = (0001 0001) bin이 숫자를 추가하기 위해 비트 단위 XOR 연산을 수행 할 수 있으므로 숫자가 다를 때 1을 제공하고 0을 제공합니다.
그래서 A XOR B = 0010 0001 이것은 합계를 제공합니다.
캐리가있는 경우 한 위치를 이동 한 후 추가해야하며 이것이 sum (int int)이하는 일입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다