دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.
انتظار این رو نداشتم. خوب فکر می کنم شما قبل از اینکه بخوای کار میکرو رو یاد بگیری (اونم ARM) باید قبلش یه سری پیش زمینه هایی داشته باشی. مثل مدار، الکترونیک و مخصوصاً منطقی.
دانش فنی تا به عمل تبدیل نشده، ذره ای ارزش نداره. اما بعضی وقت ها باید از دانش برای باز کردن مرزهای جدیدی در علم استفاده کرد، نه اینکه اونها رو صرفاً فقط به عمل تبدیل کرد.
اپراتور & فقط به دو صورت استفاده میشه. bitwise and و اخذ آدرس. این اپراتور برای عملیات منطقی استفاده نمیشه. اون موقعی که شما دارین فکر میکنین که این اپراتور منطقی هست فقط یک اشتباه هست. اینجا رو ببینید:
if( a & b )
{
}
اگر منظورتون استفاده از این اپراتور در همچین جاهایی هست باید خدمتتون عرض کنم که این دستور یک فرم خلاصه از دستور زیر هست:
if( ( a & b ) != 0 )
{
}
در اینجا مساوی نبودن عبارت a & b با عدد صفر چک میشه. بنا براین تفسیر درست اینه که:
اگر حاصل and بیتی بین a و b صفر نبود آنگاه....
بنا براین جناب Soodi شما اگر میخوایین ببینین که آیا در یک عدد بیت یا بیت هایی ست شده فقط کافیه طبق فرمایش جناب پور آزاد عددی متشکل از بیت های کذایی رو بسازین با استفاده از این اپراتور با محتوای رجیستر کذایی and کنین و حاصل رو ببینین اگر غیر صفر بود یعنی یک یا چند تا از بیت هایی که مشخص کردین یک شده اند.
مثلا فرض کنیم میخواییم ببینیم آیا بیتهای 0 و 1و 5 در عدد a ست شده اند یا نه:
if( ( a & ((1<<0)+(1<<1)+(1<<5)) ) != 0 )
{
}
اینجا برای ساختن عددی که شامل بیتهای 0و 1و 5 بصورت ست شده باشه از عمل جمع استفاده کردیم. اما چون تصور ذهنی استفاده از عمل جمع؛ محاسبات هست. برای رفع این تصور و تاکید به ساختن ماسک عددی از عمل بیتی OR با استفاده از اپراتور | (shift + \) استفاده میکنیم:
if( ( a & ((1<<0)|(1<<1)|(1<<5)) ) != 0 )
{
}
یا از فرم خلاصه شده اش:
if( a & ((1<<0)|(1<<1)|(1<<5)) )
{
}
در تمامی این حالات هم برای ساختن عددی که فقط یک بیت اش غیر صفر باشه از عمل شیفت به چپ استفاده میکنیم با اپراتور >>.
دیدگاه