gpt4 book ai didi

c++ - 在不使用 + 或 - 的情况下添加二进制整数

转载 作者:行者123 更新时间:2023-11-28 01:57:22 24 4
gpt4 key购买 nike

在不使用 + 或 - 的情况下添加两个整数。

这是我的解决方案。

class Solution {
public:
int getSum(int a, int b) {
int temp=a & b;
a=a^b;
while (temp>0){
b=temp<<1;
temp=a & b;
a=a^b;
}
return a;
}
};

但它不适用于 a=-12 的情况,b=-8.


将它与另一个人的工作解决方案并排比较,他有:

class Solution {
public:
int getSum(int a, int b) {
int sum = a;

while (b != 0)
{
sum = a ^ b;//calculate sum of a and b without thinking the carry
b = (a & b) << 1;//calculate the carry
a = sum;//add sum(without carry) and carry
}

return sum;
}
};

基本相同。为什么我的解决方案不起作用?

最佳答案

严格来说,您的解决方案和您所比较的解决方案都是不正确的,除非您对 signed 的表示形式做出具体假设。整数类型。你的不同的原因是操作顺序。

解释是用C标准本身写的。例如,来自 2011 ISO C 标准 (ISO/IEC 9899:2011) 第 6.5 节,第 4 段。

Some operators (the unary operator ~ , and the binary operators <<, >>, &, ^, and |, collectively described as bitwise operators) shall have operands that have integral type. These operators return values that depend on the internal representations of integers, and thus have implementation-defined and undefined aspects for signed types.

这些担忧以 a & b 等表达方式切中要害如果ab是负面的....而你的例子都有。 a << 1如果 a 也会有类似的担忧是负的。

要消除您的问题,您需要使用 unsigned值(按位运算符具有明确定义的行为)。如果您需要处理负值,只需以另一种方式跟踪符号(例如 bool 类型的另一个变量)。

在实践中,按位运算按预期工作 signed具有二进制补码表示的类型。然而,依赖它的问题是不需要实现来使用这样的表示。

关于c++ - 在不使用 + 或 - 的情况下添加二进制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com