标签:调用 观察 future 读书 开发 处理 原因 you 多态
Feb 24, 2020 ~ Mar 1, 2020
Problem 371. Sum of Two Integers(两整数之和) 题目链接
题目描述:给定两个数字,求两个数字之和。不能使用加法运算
思路为:不能使用加法运算,那么可以考虑使用位运算来实现加法。先观察只有一位数的情况:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0(进位为 1)
这个特性符合异或运算,那么可以通过异或运算来实现无进位加法,那么该如何计算进位呢?我们知道,二进制中有逢二进一,可以通过使用与运算得到进位,但是需要额外左移 1 位,因为 (1 & 1) << 1 = 10
。一直循环此过程,直到进位等于 0
但是,Python 中的整数并不是 32 位,因此需要进行特殊处理,采用 MASK 掩码以保证不会超过32位,利用 MAX_INT 来判断是正数还是负数。
通过的代码如下:
class Solution:
def getSum(self, a: int, b: int) -> int:
MASK = 0x100000000
MAX_INT = 0x7FFFFFFF
MIN_INT = MAX_INT + 1
while b != 0:
carry = (a & b) << 1
a = (a ^ b) % MASK
b = carry % MASK
if a <= MAX_INT:
return a
else:
return ~((a % MIN_INT) ^ MAX_INT)
本周继续 Review 每个程序员需要知道的 97 件事(英文名:97 Things Every Programmer Should Know)。原文链接。下面是本周的5个小内容:
在 Linux 中,用户调用系统调用时,使用系统调用时传递参数时,参数的值会从用户空间复制到内核空间。主要原因如下:
本周主要是在填上周欠下的坑,虽然花了不少时间,但是还没有填完。。。 :(
标签:调用 观察 future 读书 开发 处理 原因 you 多态
原文地址:https://www.cnblogs.com/mengxinayan/p/12388955.html