ايران ويج

نسخه‌ی کامل: bitset
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
کسی میتونه توضیحی بده که این دستور چطوری کار میکنه؟
#define bitset(port,bit) ((port) & (1<<bit))
منظورم اینا هست ==> (port) & (1<<bit)
ممنونم
این بیت رو تست می کنه
1<<bit
این (البته برعکسش) عدد یک رو به اندازه بیت شما شیفت می ده مثلا اگه ۲ باشه یک رو دوبار شیفت می ده تا این شکلی بشه
0b00000100 بعد با اون پرت شما and می کنه که در صورتی که بیت مربوطه یک باشه جواب غیر صفر و در صورتی که صفر باشه جواب صفره
سلام و ممنون از جوابتون
قسمت اول جوابتون رو فهمیدم ولی قسمت دوم رو نه.
این قسمت رو میشه توضیح بیشتر بدید.
بعد با اون پرت شما and می کنه که در صورتی که بیت مربوطه یک باشه جواب غیر صفر و در صورتی که صفر باشه جواب صفره
این اعداد رو ببین
0b10101010 & 0b00001000 = 0b00001000
0b11110111 & 0b00001000 = 0b00000000
در اولین حالت جواب غیر صفر چون بیت مربوطه تو عدد اول یک هست
در حالت دوم جواب صفر با اینکه همه بیت ها به جز بیت مربوطه یک هستند ولی جواب صفر
این مثال برای تست بیت شماره ۳ بود
حل شد؟
آره، این قسمت حل شد ولی یه چیز دیگه برام سواله
0b10101010 & 0b00001000 = 0b00001000
0b11110111 & 0b00001000 = 0b00000000
اینا که قرمز رنگ هستن میشن جوابی که از پرانتز بیرون میاد اما بعدش چی میشه؟(یعنی جوابمون صفر بشه یا چیزی غیر صفر ، بعد چه بلایی سر رجیستر پورت میاد که فقط همون بیت 1 میشه؟)
چون که اگه قرار باشه اینجوری( PORTB &= 1<<3) بشه با اون چیزایی که من میدونم نمیشه .
ممنونم
چی شد؟
دیگه جواب نداشت؟
گفتم این برای چک کردن بیت هست که ببینی صفر یا یک نه این که بیت رو صفر و یک کنه
مگه
#define bitset(port,bit) ((port) & (1<<bit))
یک بیت رو یک نمیکرد؟تا اینجا که ما فقط تست کریدم یک هست یا صفر
اگر درست یادم باشه، بیت هایی که شماره اش رو میدین 1 میکنه. می رم باز چک می کنم