我在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中添加数字"的问题
在downvoting之前请仔细阅读问题
我知道使用+符号进行添加的替代方法是执行以下操作:
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)
但我有两个问题:
^ & <<,但我不知道如何在JavaScript中开始寻找它们,因为我不知道它们叫什么.我试着用JavaScript编写这个...但似乎我想念一些东西
var getSum = function(a, b) {
return (a ^ b, (a & b) << 1)
};
Run Code Online (Sandbox Code Playgroud) 我试图在数据类型上运行SIMD指令int,float并且double.我需要乘法,添加和加载操作.
为了float和double我成功设法使这些说明工作:
_mm256_add_ps,_mm256_mul_ps和_mm256_load_ps(结束*pd为double).(不支持直接FMADD操作)
但对于整数,我找不到工作指令.在英特尔AVX手册中显示的所有这些都给出了GCC 4.7的类似错误,例如"'_mm256_mul_epu32'未在此范围内声明".
对于加载我使用的整数_mm256_set_epi32,这对于GCC来说很好.我不知道为什么没有定义其他指令.我需要更新一些东西吗?
我包括所有这些 <pmmintrin.h>, <immintrin.h> <x86intrin.h>
我的处理器是Intel核心i5 3570k(Ivy Bridge).