相关疑难解决方法(0)

使用按位移位操作进行符号扩展

问答后,我试着检查答案,所以我写道:

#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)

c c++ bit-manipulation

5
推荐指数
2
解决办法
5312
查看次数

如何将所有设置位向右移动?

问题:如何开发算法将所有设置位(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++ bit-manipulation

2
推荐指数
1
解决办法
2530
查看次数

这个声明是什么意思?

我不是C/C++的专家.

我今天发现了这个宣言:

typedef NS_OPTIONS(NSUInteger, PKRevealControllerType)
{
    PKRevealControllerTypeNone  = 0,
    PKRevealControllerTypeLeft  = 1 << 0,
    PKRevealControllerTypeRight = 1 << 1,
    PKRevealControllerTypeBoth = (PKRevealControllerTypeLeft | PKRevealControllerTypeRight)
};
Run Code Online (Sandbox Code Playgroud)

你们能翻译每个价值会有什么价值吗?

c cocoa cocoa-touch objective-c ios

1
推荐指数
1
解决办法
371
查看次数

标签 统计

c ×3

bit-manipulation ×2

c++ ×2

cocoa ×1

cocoa-touch ×1

ios ×1

objective-c ×1