相关疑难解决方法(0)

C++中循环移位(旋转)操作的最佳实践

左右移位运算符(<<和>>)已在C++中可用.但是,我无法找到如何执行循环移位或旋转操作.

如何执行"向左旋转"和"向右旋转"等操作?

在这里向右旋转两次

Initial --> 1000 0011 0100 0010
Run Code Online (Sandbox Code Playgroud)

应该导致:

Final   --> 1010 0000 1101 0000
Run Code Online (Sandbox Code Playgroud)

一个例子会有所帮助.

(编者注:如果旋转计数为零,许多常见的表达方式在C中旋转会受到未定义的行为的影响,或者编译为不止一个旋转机器指令.这个问题的答案应记录最佳实践.)

c c++ bit-manipulation c++-faq rotation

84
推荐指数
9
解决办法
10万
查看次数

当使用超过32次时,32位整数为什么不按预期工作,为什么不移位"<<"?

当我编写以下程序并使用GNU C++编译器时,1我认为输出是由编译器执行的旋转操作引起的.

#include <iostream>

int main()
{
    int a = 1;
    std::cout << (a << 32) << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但从逻辑上讲,正如所说的那样,如果位溢出位宽就会丢失,输出应为0.发生了什么?

代码在ideone上,http: //ideone.com/VPTwj .

c++ bit-shift

59
推荐指数
7
解决办法
5万
查看次数

什么是a ^ b和(a&b)&lt;&lt; 1?

我在leetcode中做了这个问题

请求:

计算两个整数a和b的总和,但不允许使用+和-运算符。

我不明白它提供的解决方案

有人可以解释一下此getSum功能的工作原理吗?

这是JS中的答案:

var getSum=function(a,b) {
    const Sum = a^b; //I can't understand how those two line's code can
    const carry = (a & b) << 1; //get the sum
        if(!carry) {
            return Sum
        }
    return getSum(Sum,carry);
};
console.log(getSum(5,1));
Run Code Online (Sandbox Code Playgroud)

javascript bitwise-operators

26
推荐指数
2
解决办法
2057
查看次数

不带+运算符添加两个数字(澄清)

我知道我们可以使用二进制加法器的逻辑Sum = a XOR bCarry = a AND b

我也有一个解决方案:

int add(int a, int b)
{
     if(b == 0)
         return sum;
     sum = a ^ b;
     carry = (a & b) << 1;
     return add(sum,carry);
}
Run Code Online (Sandbox Code Playgroud)

我在这里不明白的是为什么在每次递归期间进位位移位或乘以2?

bit-manipulation

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

Python中的逐位减法

这是昨天我的问题的后续行动:

CMS慷慨地提供了使用按位运算符在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( "6 + 3 = %d", add(6,3));
    printf( "6 - 3 = %d", add(6,-3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,然后我将它移植到Python,如下所示:

def add(x, y):
    while True:
        a = x & y
        b = x ^ y
        x = a …
Run Code Online (Sandbox Code Playgroud)

python low-level

8
推荐指数
2
解决办法
4736
查看次数

不使用+号添加两个数字

我9年级,我的数学老师让我+在C程序中使用登录添加数字.

我试过, a - (-b) = a + b;但我的数学老师想要一些其他的选择.

c

8
推荐指数
4
解决办法
940
查看次数

理解求和逻辑

这是在不使用运算符的情况下执行加法的求和逻辑,+如下所示,

int add(int a, int b) {
   const char *c=0;
   return &(&c[a])[b];
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我理解如何return声明如何添加a&b.

c

7
推荐指数
2
解决办法
483
查看次数

如何使用这些字符创建加法器函数?

我看到了一个"谜题",你必须在C中编写一个返回值的函数a+c,但是,你不能使用+运算符.

unsigned f(unsigned a, unsigned c) {
    return <write your coe here>;
}
Run Code Online (Sandbox Code Playgroud)

您只能使用以下字符:harc()&|[]*/.

c math function

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

不使用+符号添加

int add(int a, int b)
{
  return (int)&(((char *)a)[b]);
}
Run Code Online (Sandbox Code Playgroud)

我为什么要投a一个char *而不是int *

我试图完全理解这段代码,但我不能,所以如果你很容易,请提供一个简单的英文解释.

c c++

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