Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าบิตในช่วง L ถึง R ของตัวเลขสองตัวเป็นส่วนเสริมของกันและกันหรือไม่ใน Python


สมมติว่าเรามีตัวเลข x และ y สองตัวและช่วงที่กำหนด (ซ้าย, ขวา) เราต้องตรวจสอบว่าบิตทั้งหมดในช่วงจากซ้ายไปขวาในทั้งสองจำนวนที่กำหนดเป็นส่วนเสริมของกันและกันหรือไม่ เราต้องจำไว้ว่าจากขวาไปซ้าย ดังนั้นบิตที่มีนัยสำคัญน้อยที่สุดจะถือว่าอยู่ที่ตำแหน่งแรก

ดังนั้น หากอินพุตเป็น x =41 y =54 ซ้าย =2 ขวา =5 เอาต์พุตจะเป็น True เนื่องจากการแสดงไบนารีของ 41 และ 54 คือ 101001 และ 110110 บิตในช่วง 2 ถึง 5 ของ x และ y คือ "1001" และ "0110" ซึ่งเป็นส่วนเติมเต็มของกันและกัน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • อุณหภูมิ :=x XOR y
  • คืนค่า จริง เมื่อบิตทั้งหมดในช่วง (ซ้าย, ขวา) ของ temp เป็น 1 มิฉะนั้นจะเป็นเท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

def are_all_setbits_in_range(n, left, right):
   val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1)
   new_value = n & val
   if val == new_value:
      return True
   return False
def solve(x, y, left, right):
   temp = x ^ y
   return are_all_setbits_in_range(temp, left, right)
x = 41
y = 54
left = 2
right = 5
print(solve(x, y, left, right))

อินพุต

41, 54, 2, 5

ผลลัพธ์

True