在此问答后,我试着检查答案,所以我写道:
#include <stdio.h>
int main ()
{
int t;int i;
for (i=120;i<140;i++){
t = (i - 128) >> 31;
printf ("t = %X , i-128 = %X , ~t & i = %X , ~t = %X \n", t, i-128 , (~t &i), ~t);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
t = FFFFFFFF , i-128 = FFFFFFF8 , ~t & i = 0 , ~t = 0
t = FFFFFFFF , i-128 = FFFFFFF9 , ~t & i = …Run Code Online (Sandbox Code Playgroud) 问题:如何开发算法将所有设置位(1)以32位整数移位到右侧
例
V= 0b01001000110010
Run Code Online (Sandbox Code Playgroud)
将V包含5位集,如果我们将其转移到我们得到正确的:
V = 0b011111
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
Run Code Online (Sandbox Code Playgroud)
上面的代码返回32位整数的设置位数
并使用以下代码
c = (1<<c) - 1;
Run Code Online (Sandbox Code Playgroud)
我们将第c一个位设置为1.释
还有其他算法比上述解决方案更好吗?
是否有可能只使用位运算(&,|,^,~, …
我不是C/C++的专家.
我今天发现了这个宣言:
typedef NS_OPTIONS(NSUInteger, PKRevealControllerType)
{
PKRevealControllerTypeNone = 0,
PKRevealControllerTypeLeft = 1 << 0,
PKRevealControllerTypeRight = 1 << 1,
PKRevealControllerTypeBoth = (PKRevealControllerTypeLeft | PKRevealControllerTypeRight)
};
Run Code Online (Sandbox Code Playgroud)
你们能翻译每个价值会有什么价值吗?