题目:给定两个32位整数a和b,返回a和b中较大的。要求:不用任何比较判断。
不写原理,直接上推导图表:
代码:
# 不用任何比较判断找出两个数中较大的数 import random def flip(x): return x^1 #待测试方法 def binCompare(x,y): z = x - y sigX = flip((x>>31)&1) sigY = flip((y>>31)&1) sigZ = flip(((z>>31)&1)) sigXYSam = flip(sigX^sigY) sigXYDiff = sigX^sigY func = sigXYSam*sigZ + sigXYDiff*sigX return func*x + flip(func)*y #常规正确方法 def normalMethod(x,y): return max(x,y) #对数器 def Compare(x,y): return True if x == y else False nCount = 0 maxValue = 1000000 #一百万次 while nCount <= maxValue: x = random.randint(-1000000, 1000000) #正负一百万之间的随机数 y = random.randint(-1000000, 1000000) binFunResult = binCompare(x,y) normalFunResult = normalMethod(x,y) if not Compare(binFunResult, normalFunResult): print("Fucked.") print("Sample:({},{})".format(x,y)) break nCount += 1 else: print("Success.")