PDA

View Full Version : استفاده از bitset



Azar.099
شنبه 30 خرداد 1394, 23:03 عصر
سلام
میخوام اعدادی که بهم میدن را به باینری تبدیل کنم
اما توی bitset باید بهش بدیم که تا چند رقم باینری میخوایم به باینری تبدیل شه مثلا :
bitset<8> (num)
من چون بازه اعدادم زیادهست نمیدونم چند رقمی میشه که بهش این تعداد رقم را بدم
چجوری باید اینکارو بکنم ؟
اما میدونم کاکسیمم تا 64 تا است
اما نمیتونم ماکزیمم را بهش بدم
ممنون

Mahdi.lpr
شنبه 30 خرداد 1394, 23:36 عصر
سلام
میخوام اعدادی که بهم میدن را به باینری تبدیل کنم
اما توی bitset باید بهش بدیم که تا چند رقم باینری میخوایم به باینری تبدیل شه مثلا :
bitset<8> (num)
من چون بازه اعدادم زیادهست نمیدونم چند رقمی میشه که بهش این تعداد رقم را بدم
چجوری باید اینکارو بکنم ؟
اما میدونم کاکسیمم تا 64 تا است
اما نمیتونم ماکزیمم را بهش بدم
ممنون

سلام اینطور که معلومه شما میخواین از bitset به صورت داینامیک استفاده کنی
تا اونجایی که من یادمه خود c++ از bitset داینامیک پشتیبانی نمیکنه ولی کتابخونه boost
bitset رو به صورت داینامیک (http://www.boost.org/doc/libs/1_57_0/libs/dynamic_bitset/dynamic_bitset.html) در اختیار برنامه نویس قرار میده

rahnema1
شنبه 30 خرداد 1394, 23:42 عصر
سلام
اگه تعداد بیت مفید یک عدد را میخواهید در کامپایلر gcc اینجور می شه

#include <limits.h>
#include <stdint.h>
#include <stdio.h>

int f(int32_t x)
{
return x != 0 ? sizeof(x) * CHAR_BIT - __builtin_clz(x) : 0;
}
int main()
{

unsigned int a = 12;
printf("%d", f(a));
}

منبعش لینک زیر هست که برای ++vc هم توضیح داده:
http://stackoverflow.com/questions/11122495/how-to-determine-the-number-of-useful-bits-of-a-number

Azar.099
شنبه 30 خرداد 1394, 23:44 عصر
bitset<numeric_limits<unsigned short>::digits>(num)

این خط چیکار میکنه ؟؟

Azar.099
شنبه 30 خرداد 1394, 23:53 عصر
سلام اینطور که معلومه شما میخواین از bitset به صورت داینامیک استفاده کنی
تا اونجایی که من یادمه خود C++‎ از bitset داینامیک پشتیبانی نمیکنه ولی کتابخونه boost
bitset رو به صورت داینامیک (http://www.boost.org/doc/libs/1_57_0/libs/dynamic_bitset/dynamic_bitset.html) در اختیار برنامه نویس قرار میده

اره میخوام یه جوری داینامیک باشه
چجوری از این کتابخونه استفاده کنم ؟

rahnema1
شنبه 30 خرداد 1394, 23:54 عصر
معمولا تعداد بیت unsigned short برابر 16 هست .یعنی bitset تشکیل می دهد که تعداد بیت ها ی اون 16 تا باشه

Azar.099
شنبه 30 خرداد 1394, 23:56 عصر
سلام
اگه تعداد بیت مفید یک عدد را میخواهید در کامپایلر gcc اینجور می شه

#include <limits.h>
#include <stdint.h>
#include <stdio.h>

int f(int32_t x)
{
return x != 0 ? sizeof(x) * CHAR_BIT - __builtin_clz(x) : 0;
}
int main()
{

unsigned int a = 12;
printf("%d", f(a));
}

منبعش لینک زیر هست که برای ++vc هم توضیح داده:
http://stackoverflow.com/questions/11122495/how-to-determine-the-number-of-useful-bits-of-a-number

بله
نه از gcc استفاده نمیکنم . توی لینک هم فقط همینی بود که شما نوشتین

rahnema1
یک شنبه 31 خرداد 1394, 00:06 صبح
گفته بود در vc از BitScanReverse_ استفاده بشه
https://msdn.microsoft.com/en-us/library/fbxyd7zd.aspx

Azar.099
یک شنبه 31 خرداد 1394, 00:13 صبح
گفته بود در vc از BitScanReverse_ استفاده بشه
https://msdn.microsoft.com/en-us/library/fbxyd7zd.aspx
من خوندم اما درست متوجه نشدم چجوری هست
خودتون میتونین توضیح بدین ؟

خودbitset هیچ جوره نمیشه همچنین کاری باهاش کرد ؟

rahnema1
یک شنبه 31 خرداد 1394, 00:28 صبح
ببینید اونجا عدد 12 را به عنوان ورودی وارد کرده که معادل دودویی اون می شه 1100 شما از سمت راست بشمرید ( با اندیس صفر) با آخرین عدد 1 که مواجه می شوید اندیسش می شه 3 یعنی تعداد بیتهای مفید اون عدد میشه 3 + 1 یعنی 4
bitset هم همین طور که دوستمون اشاره کردند سایزش را زمان کامپایل می شه تعیین کرد و هنگام اجرا نمی شه سایزش را تغییر داد