मैं एक रजिस्टर रीड वैल्यू पर बिटमास्क डालता हूं और लॉजिकल और वैल्यू पर निष्पादित करता हूं। मैं जो उम्मीद करता हूं वह है: clear_reg_val: 00000000000000000100100000000000 मेरा वास्तविक आउटपुट है:

# reg_value is:  00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
# reg_value is:  00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000

तो मुझे नहीं पता कि क्यों clear_reg_val का बिट 4 '0' के बजाय '1' बन जाता है फ़ंक्शन का पायथन कोड नीचे स्क्रीनशॉट में जोड़ा गया है:

पढ़ने के लिए पायथन फ़ंक्शन लिखें संशोधित करें

-1
Mansur D 1 अप्रैल 2020, 13:04

1 उत्तर

सबसे बढ़िया उत्तर

त्रुटि उस तरीके में है जिस तरह से आप उल्टा मुखौटा बना रहे हैं।

आप इसे एक स्ट्रिंग ऑपरेशन के रूप में कर रहे हैं, और int का उपयोग करके स्ट्रिंग को वापस एक पूर्णांक में परिवर्तित कर रहे हैं। आप base=2 निर्दिष्ट करना भूल गए हैं और स्ट्रिंग को दशमलव संख्या के रूप में माना जाता है।

32 बिट मान को उलटने का उचित तरीका है:

MASK32 = 2**32-1

invx = ~x & MASK32
2
VPfB 1 अप्रैल 2020, 10:41