چک کردن توان 2 بودن عدد بوسیله عملگر های بیتی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چک کردن توان 2 بودن عدد بوسیله عملگر های بیتی

+1 امتیاز

با سلام.


 long long a;
	long long b;
cout<<"enter a number:"<<endl;
	cin>>a;
	b=a;
	b=b>>1;
	b=b<<1;
	if(b==a)
		cout<<"YEs"<<endl;
	else
		cout<<"NO"<<endl;

برای نوشتن برنامه ای که با استفاده از عملگر های بیتی مشخص کنه که آیا یک عدد توانی از دو هست یا نه از کدوم عملگر ها باید استفاده کرد این کد مثلا برای عددی مثل 18 ،yes چاپ میکنه.در صورتی که اشتباهه

سوال شده بهمن 13, 1392  بوسیله ی maryam (امتیاز 338)   12 33 44
ویرایش شده بهمن 13, 1392 بوسیله ی BlueBlade

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

اون کدی که شما نوشتی که کاری نمی کنه عدد رو شیفت میده به راست دوباره شیفت میده به چپ .

شیفت کردن به راست مثل تقسیم به 2 میمونه  میتونی مثل همون روشی که به 2 تقسیم می کنی تا وقتی که 0 نشده بنویسیش

یا یک راه دیگه این که از اون جایی که می دونیم عدد اگر توانی از 2 باشه به این شکله :

10 یا 100 یا 1000 و...

و اگر عدد  توانی از 2 -1 باشه این شکلی میشه :

01 یا 011 یا 0111  ,...

جالا کافیه این 2 تا رو با هم & کنیم اگر 0 شد یعنی توان 2 هست ( البته برای 1 جواب نمیده )

int main()
{
    long long a;
    long long b;
    cout<<"enter a number:"<<endl;
    cin>>a;

    if(a==1)
        return 0;
    if((a&(a-1)) == 0)
        cout<<"yes";

}

یِا این که مثلا می تونی اگر عدد زوج نبود سریع بگی توان 2 نیست :

(x & 1) != 0

 

پاسخ داده شده بهمن 13, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد بهمن 17, 1392 بوسیله ی مصطفی ساتکی
...