LeetCode 371. Suma de dos enteros (suma de operación de bit)

1. Título

Los operadores + y- no se utilizan .

示例 1:
输入: a = 1, b = 2
输出: 3

示例 2:
输入: a = -2, b = 3
输出: 1

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/sum-of-two-integers Los
derechos de autor pertenecen a la red de deducciones. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.

2. Resolución de problemas

Preguntas similares: Jianzhi Oferta-Entrevista Pregunta 65. La suma, la resta, la multiplicación y la división no son necesarias para la suma (la operación de bits depende de)

  • Operación de bits, clasificar y discutir cada bit binario de ayb
class Solution {
public:
    int getSum(int a, int b) {
        int sum = 0, one = 0, curBit;
        int bitA, bitB;
        for(int i = 0; i <= 31; ++i)
        {
        	bitA = (a&(1<<i)), bitB = (b&(1<<i));
            //获取a, b 的每一个二进制位
        	if((bitA^bitB))//不同0,1 或者 1,0
        	{
        		curBit = 1;//当前位和1
        		if(one)//如果上一次有进位
        			curBit = 0;//当前位为0,进位one还是1
        	}
        	else//相同0,0 或者 1,1
        	{
        		curBit = 0;//当前位肯定为0
        		if(one)//上一次有进位
        			curBit = 1;//当前位为1
        		if(bitA&bitB)//两个位都为1
        			one = 1;//产生进位
        		else//两个都为0
        			one = 0;//无进位
            }
        	if(curBit)//当前位为1
        		sum |= (1<<i);//加入到sum
        }
        return sum;
    }
};

0 ms 6 MB

Publicado 892 artículos originales · elogiado 2665 · 470,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/105645358
Recomendado
Clasificación