Mic*_*yes 2 language-agnostic bit-shift
我的赋值/项目中有一个问题,即只使用位移和逻辑运算符将无符号整数加1 .函数中不应有任何"+"," - ","*"或"/"符号.
我从最后几天开始尝试,但还没有成功.到目前为止,我已经尝试了以下内容:
int A = (((B&C)<<1)^(B^C))
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题.
你可以用任何编程语言帮助我.
Hen*_*rik 14
unsigned int i = ...;
unsigned int mask = 1;
while (i & mask)
{
i &= ~mask;
mask <<= 1;
}
i |= mask;
Run Code Online (Sandbox Code Playgroud)
Java的:
public static int inc(int i){
if ((i & 1) == 0)
return i | 1;
else
return inc(i>>1)<<1;
}
Run Code Online (Sandbox Code Playgroud)
henrik的 PS while循环变体显然更快
试试这个:
\nint n = 3;\nn = abs(~n);\nstd::cout << n;\nRun Code Online (Sandbox Code Playgroud)\n~n = -(n+1)[~用于按位补码 ]。(n + 1)是由于 2\xe2\x80\x99s 补码转换中加 1 造成的。
要(x + 1)再次应用否定。所以,最终的表达式就变成了abs(~x)。