bitwise operator '&'

پرسیده شده
فعالیت 1166 روز پیش
دیده شده 1006 بار
4

چطور میشه توسط این عملگر اعداد زوج و فرد رو تشخیص داد؟

برای توضیح اول چند مفهوم را با هم بررسی کنیم:

  • اپراتورهای Bitwise:
    این اپراتورها برای اجرای عملیات های بیتی(منظور بیت به بیت) به کار می روند. عملیات های چهاگانه ریاضی به منظور پردازش سریعتر می توانند به این شکل استفاده شوند.
    با توجه به مثال، اپراتور & را بررسی می کنیم:
     
  • & (Bitwise AND)
    یک اپراتور باینری (دودویی یا همون ۱-۰) ، که به منظور عملیات AND (همون ضرب خودمون) بیت ها به کار می رود. مقدار خروجی این عملیات تنها زمانی برابر ۱ یا True است که مقادیر ورودی همگی برابر ۱ باشند.(مثل ضرب که داریم: ۱=۱*۱)
     معمولا مفهوم بالا را توسط یه جدول به نام جدول صحت (Truth Table) بیان می کنند:
    جدول صحت

    خب، حالا چطور توسط تابع زیر می توان زوج یا فرد بودن رو تشخیص داد؟
    function odd($value)
    {
        return ($value & 1);
    }

    از آنجایی که این اپراتور به منظور عملیات های باینری استفاده می شود، پس مقدار value$ که ما به آن یک عدد دسیمال( عدد صحیح مانند:۱ و۲ و۳ و ... ) می دهیم در این عملیات به صورت باینری در نظر گرفته می شود، به عنوان مثال عدد دسیمال ۵ برابر عدد باینری ۱۰۱ می باشد.
     

  • مسئله جدید: چجوری ۵ تو باینری میشه ۱۰۱ !؟
    برای تبدیل اعداد دسیمال به باینری باید عملیات تقسیم بر ۲ را به صورت متوالی انجام داد، به عنوان مثال:
    باینری به دسیمال

     

  • حالا شد ?. پس مقدار باینری value در ۱ AND (ضرب) میشه و می توان زوج یا فرد بودن عدد را تشخیص داد. به همین راحتی

    امیدوارم متوجه شده باشید

 

 

 

فایل پیوست

محمدرضا رحیمی
محمدرضا رحیمی

30 بهمن 98

7
حذف شده

عملگرهای بیتی معمولا سرعت بالایی دارند و اگر بتونید عملیات رو با اونها هندل کنید سرعت اجرا و محاسبه بالاتری دارند.

البته خوانایی و درک دلیل استفاده از اونها سخت میشه بعضا ...

فایل پیوست

لقمان آوند

توسط

لقمان آوند

30 بهمن 98

-1
حذف شده

توی سایت stack overflow نوشته :

In this case, return($var & 1); will do a bitwise AND against 0000....0001 returning 1 or 0 depending on the last bit of $var.

If the binary representation of a number ends in 0, it is even (in decimal).

If the binary representation of a number ends in 1, it is odd (in decimal).

طبق این توضیح چرا ما وقتی توابع رو به شکل زیر تعریف می کنیم نتیجه ای نمی گیریم ؟

طبق کد زیر اگه آخرین بیت برابر 0 باشه عدد زوج در غیر اینصورت عدد فرد هستش, پس چرا کد زیر کار نمی کنه؟

function odd(int $value){
  return (!($value & 0));
}
function even(int $value){
  return ($value & 0);
}

 

فایل پیوست

Amir F

توسط

Amir F

29 بهمن 99