Monday, 15 September 2014

c - Why is this line obfuscated? -


इस स्निपेट में,

  if (((RCC_OscInitStruct-> OscillatorType) & amp; RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) {/ * स्टेटमेंट्स * /}  

सदस्य ऑस्केलेटर टाईप में निम्न में से कोई भी मान, या उनका संयोजन हो सकता है

  #define RCC_OSCILLATORTYPE_NONE ((uint32_t) 0x00000000) #define RCC_OSCILLATORTYPE_HSE ((uint32_t) 0x00000001) #define RCC_OSCILLATORTYPE_HSI ((uint32_t) 0x00000002) #define RCC_OSCILLATORTYPE_LSE ((uint32_t) 0x00000004) #define RCC_OSCILLATORTYPE_LSI ( (Uint32_t) 0x00000008)  

क्यों यदि इस तरह से लिखा है? ऐसा क्यों नहीं बस?

यदि (RCC_OscInitStruct-> OscillatorType == RCC_OSCILLATORTYPE_HSI)

आरसीसी_ऑस्क इनटस्ट्रॉक्ट-> ऑस्सीलेटर टाईप एक पूर्णांक मान में पैक किए गए बिट्स का एक संग्रह है, प्रत्येक बिट मानों ( RCC_OSCILLATORTYPE_HSE , ...) में से एक का प्रतिनिधित्व करता है। यही कारण है कि वे 2 की शक्तियों में आते हैं। आपके द्वारा दिखाया गया कोड, बस जांचता है कि यदि RCC_OSCILLATORTYPE_HSI से संबंधित बिट सेट है। यह बहुत संभव है कि अन्य मानों का बिट भी सेट हो।

उदाहरण के लिए यदि ऑस्सीलेटर टाईप का द्विआधारी प्रतिनिधित्व 0 ... 011 है, तो पहले और दूसरा बिट सेट है, जिसका अर्थ है कि RCC_OSCILLATORTYPE_HSE और RCC_OSCILLATORTYPE_HSI मान चुने गए हैं।


No comments:

Post a Comment