LCR 190. 加密运算
计算机安全专家正在开发一款高度安全的加密通信软件,需要在进行数据传输时对数据进行加密和解密操作。假定 dataA
和 dataB
分别为随机抽样的两次通信的数据量:
- 正数为发送量
- 负数为接受量
- 0 为数据遗失
请不使用四则运算符的情况下实现一个函数计算两次通信的数据量之和(三种情况均需被统计),以确保在数据传输过程中的高安全性和保密性。
示例 1:
输入:dataA = 5, dataB = -1 输出:4
提示:
dataA
和dataB
均可能是负数或 0- 结果不会溢出 32 位整数
思路:
二进制加法器,&表示进位,^表示本位,<<表示左移,共同构成全加器。
十进制例子:13 + 98 = 111
百 十 个
1 3
+ 9 8
------
0 1 // 本位
1 1 // 进位
然后:
0 1
+ 1 1 0
--------
1 1 1
代码:
class Solution {
public:int encryptionCalculate(int dataA, int dataB) {while(dataB){int c = dataA & dataB; //进位,都是1才能进位dataA = dataA ^ dataB; //本位,相同则为0,不同则为1dataB = (unsigned)c << 1;}return dataA;}
};