ورود

View Full Version : سوال: انجام یک عمل منطقی در C++‎



F.N.44
دوشنبه 05 بهمن 1394, 20:54 عصر
سلام دوستان

می خوام تمام اعضای یک آرایه حاوی اعداد دودویی با یک عدد دودویی xor بشه چه راهی پیشنهاد می کنید ؟
ماهیت عمل ایکس اور رو می دونم مثلا دو رقم اعداد دودویی با هم مقایسه بشن اگر برابر باشند مثلا صفر رو برگردونه و .... اما برای عملیات برنامه نویسی به مشکل خوردم مثلا چجوری هر کدوم از اعضای ارایه رو جداگونه بریزم تو یه آرایه هشتایی وبا اون عدد دودویی ایکس اور کنم و در نهایت یه آرایه به طول آرایه اولی برگردونم.......



00111001
01101101
00001111
11111110
00110011
11100011
01010101
10101010
00001010
100011011



تمام اعضای آرایه تک تک با عدد 00001010 ایکس اور بشه و درنهایت پاسخش در یک آرایه ریخته بشه به ترتیب

Poores
چهارشنبه 07 بهمن 1394, 21:40 عصر
bool a[8];
string b = "00001010";
for(int i=0;i<b.length();i++)
a[i] = b[i] - 48;


به اینصورت یک عدد دودویی که در رشته ریخته شده رو میشه در یک آرایه 8تایی ریخت.
حالا اگه همه عددهارو داخل آرایه های 8تایی بریزی (مثلا a و b دو آرایه 8تایی دربر دارنده یک عدد دودویی باشند ) با یک حلقه چک میکنی که اگه a[i] == b[i] بود آرایه جواب c[i] = 0 میشه در غیر اینصورت c[i] = 1

Ananas
پنج شنبه 08 بهمن 1394, 02:50 صبح
سلام.
هر 32 بیت رو تو یک متغیر 32 بیتی نگه دارید و موقع xor کردن هم کافیه که از عملیات بیتی استفاده کنید و هر یک از متغیر های 32 بیتی که عضو آرایه هستند رو به ترتیب با متناظرش xor کنید. تبدیل کردن رشته ی باینری 0 و 1 هم به متغیر 32 بیتی با استفاده از عملگرهای بیتی به راحتی انجام میشه. مثلا:

string s = "10011000111100010110001110011001";
int32_t i3 = 0L;
for (int i = 0; i < 32; i++)
{
if (s[i] != '0')
i3 |= 1 << (31 - i);
};

و تبدیل متغیر 32 بیتی به رشته هم کار آسونیه:

int32_t i32 = 2131151;
char str_bin[33];
str_bin[32] = (char)0;
for (int i = 0; i < 32; i++)
{
if ( (i32 & (1 << i)) == 0 )
str_bin[31 - i] = '0';
else
str_bin[31 - i] = '1';
};

اینها مثال بود. ممکنه لازم باشه تغییر بدید. تغییرش با خودتون.