所以问题是在C中加上3个数字(2的补码)。通常应该很简单,但这个问题的难点在于你只能使用ops! 〜& ^ | << >>,没有任何循环,或函数调用,或任何花哨的东西。只是那些操作。他给了我们一个函数,将两个单词组合在一起。我写的函数(sum3)的返回值是返回和(word1,word2)。我的职责是确定将word1和word2设置为什么,以便调用sum函数给我正确的答案。哦,而且我只能在那里使用16个那些操作。
我尝试将word1设置为x ^ y,将word2设置为(x& y)<< 1,看看我是否至少得到了前2个数字的正确答案,并且它总是最终正确。但是,我不知道怎么把z扔进混音而不搞乱一切。我认为这是最大的问题......有人请求帮助,我搞砸了,并没有意识到这是在5个小时后到期,所以我吓坏了。至少是一个很好的提示...什么,什么的。
答案 0 :(得分:3)
只是提示:a + b == (a ^ b) + ((a & b) << 1)
。这里a & b
是进位的表达式。
正如您所看到的,通过此转换,您可以减少对某些逻辑运算添加N位和添加N-1位。如果给出了N,你可以手动展开循环,整个结果只包含XOR,AND和SHL(1)。