چطور میشه توسط این عملگر اعداد زوج و فرد رو تشخیص داد؟
برای توضیح اول چند مفهوم را با هم بررسی کنیم:
function odd($value)
{
return ($value & 1);
}
از آنجایی که این اپراتور به منظور عملیات های باینری استفاده می شود، پس مقدار value$ که ما به آن یک عدد دسیمال( عدد صحیح مانند:۱ و۲ و۳ و ... ) می دهیم در این عملیات به صورت باینری در نظر گرفته می شود، به عنوان مثال عدد دسیمال ۵ برابر عدد باینری ۱۰۱ می باشد.
مسئله جدید: چجوری ۵ تو باینری میشه ۱۰۱ !؟
برای تبدیل اعداد دسیمال به باینری باید عملیات تقسیم بر ۲ را به صورت متوالی انجام داد، به عنوان مثال:
باینری به دسیمال
حالا شد ?. پس مقدار باینری value در ۱ AND (ضرب) میشه و می توان زوج یا فرد بودن عدد را تشخیص داد. به همین راحتی
امیدوارم متوجه شده باشید
عملگرهای بیتی معمولا سرعت بالایی دارند و اگر بتونید عملیات رو با اونها هندل کنید سرعت اجرا و محاسبه بالاتری دارند.
البته خوانایی و درک دلیل استفاده از اونها سخت میشه بعضا ...
توی سایت 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);
}