use*_*126 25 addition low-level
我和一个朋友来回与脑筋急转弯,我不知道如何解决这个问题.我的假设是,有些按位运算符是可能的,但不确定.
CMS*_*CMS 42
在C中,使用按位运算符:
#include<stdio.h>
int add(int x, int y) {
int a, b;
do {
a = x & y;
b = x ^ y;
x = a << 1;
y = b;
} while (a);
return b;
}
int main( void ){
printf( "2 + 3 = %d", add(2,3));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
XOR(x ^ y)是不带进位的加法. (x & y)是每一位的结转. (x & y) << 1是每个位的进位.
循环不断添加进位,直到所有位的进位为零.
ack*_*ckb 23
int add(int a, int b) {
const char *c=0;
return &(&c[a])[b];
}
Run Code Online (Sandbox Code Playgroud)
不对吗?
int add(int a, int b)
{
return -(-a) - (-b);
}
Run Code Online (Sandbox Code Playgroud)
定义"最佳".这是一个python版本:
len(range(x)+range(y))
Run Code Online (Sandbox Code Playgroud)
在+执行列表连接,而不是加法.
CMS的add()函数很漂亮.它不应该被一元否定所玷污(非按位运算,等于使用加法:-y ==(~y)+1).所以这是一个使用相同的按位设计的减法函数:
int sub(int x, int y) {
unsigned a, b;
do {
a = ~x & y;
b = x ^ y;
x = b;
y = a << 1;
} while (a);
return b;
}
Run Code Online (Sandbox Code Playgroud)