演算法中二進位制運算的應用

2021-08-28 16:20:10 字數 1695 閱讀 9630

def subset(nums):

"""通過二進位制數的特性,求給定集合的子集

:param nums:

:return:

"""n = len(nums)

res =

for i in range(2 ** n):

cur =

for j in range(n):

if i & (2 ** j) == 2 ** j:

return res

def exchange(x, y):

"""不用額外的空間交換兩個變數的值

用到的異或的運算,有兩個公式(相同為0, 不同為1)

0 ^ a = a

a ^ a = 0

:param x:

:param y:

:return:

"""x ^= y

y ^= x

x ^= y

return x, y

"""給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3

輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3

輸出: -2

說明:被除數和除數均為 32 位有符號整數。

除數不為 0。

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1"""

class solution:

def divide(self, dividend, divisor):

""":type dividend: int

:type divisor: int

:rtype: int

"""if divisor == 0:

return pow(2, 31) - 1

sign = 1 if divisor * dividend >= 0 else -1

divisor = divisor if divisor >= 0 else -divisor

dividend = dividend if dividend >= 0 else -dividend

res = 0

while dividend >= divisor:

i = 0

tmp = divisor

while tmp <= dividend:

tmp <<= 1

i += 1

print("i is {}, dividend is {}, tmp is {}".format(i, dividend, tmp))

res += 1 << (i - 1)

dividend -= (tmp >> 1)

res *= sign

if res >= -pow(2, 31) and res < pow(2, 31):

return res

else:

return pow(2, 31) - 1

s = solution()

print(s.divide(7, 3))

C 中二進位制運算在許可權驗證的應用

在我的另一篇文章中 委託在許可權驗證中的應用 見我的blog http blog.csdn.net curllion 或http spaces.msn.com members curllion 提到了乙個函式validateauthor,其實我以前見過這樣實現的,就是乙個許可權用乙個文本來表示,可能...

二進位制運算

運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...

二進位制運算( )

負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...