原文地址
使用逻辑运算符实现“加法”
int add(int x, int y) {
int a, b;
do {
printf("a %o = x %o & y %o\n", a = x & y, x, y); // 计算进位 a
printf("b %o = x %o ^ y %o\n", b = x ^ y, x, y); // 计算本位和
printf("x %o = a %o << 1\n", x = a << 1, a); // 新的加数 x
printf("y %o = b %o\n\n", y = b, b); // 新的家数 y
} while (a); // 直到没有进位。
return b;
}
使用加法实现 div 3 操作:
int divideby3 (int num) {
int sum = 0;
while (num > 3) {
sum = add(num >> 2, sum);
num = add(num >> 2, num & 3);
}
if (num == 3)
sum = add(sum, 1);
return sum;
}
基本原理
- n = 4 * a + b
- n / 3 = a + (a + b) / 3
- So sum += a, n = a + b, and iterate
- When a == 0 (n < 4), sum += floor(n / 3); i.e. 1, if n == 3, else 0
-
极限 1/3 = 1/4 + 1/16 + 1/32 + ......
使用库函数:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int num = 1234567; int den = 3; div_t r = div(num,den); // div() is a standard C function. printf("%d\n", r.quot); return 0; }