สมมติว่าเรามีตัวเลข 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