• 0
Developer .NET

سلسلة - شغل مخك (11)

سؤال

كيف تعكس ترتيب البتات في رقم 32 بت ...

يعني --- لو كان الرقم 1110001101

راح يصير 1011000111

؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

10 إجابة على هذا السؤال .

  • 0

السلام عليكم


int reverse(int n)
{
n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa) ;
n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc) ;
n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0) ;
n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00) ;
n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000) ;
return(n);
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:confused: :confused:

طيب tmaaa أطلب شرح الكود من بعد اذنك ... ؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اشرح لي الكود الموجود في السؤال الثاني من السلسله وانا اشرح هذا الكود :P :P :P

(f)

CIONO1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طيب أنا ذكرت أنو هذاك الكود مو من عندي لذلك ماشرط اشرحو أنا بس أنت ماذكرت شي لذلك يجب عليك أن تشرحه :mad: :mad:

:P :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

الكود اكيد 99% لست انا من كتبه :confused: :confused:

هو مشابه للكود في السؤال الثاني ..

عليك بشرح الكود الموجود في السؤال الثاني :P :P :P :P :P

1 : 0 خسرت يا هاني :D .

ان وجدت اي معلومات عن الاكواد السابقة ارجو اعلامي , وان وجدت انا ان شاء الله ساكتبها هنا .

(f)

CIONO1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

هناك كود اخر . من سيشرحه ؟ :P

ملحوظة هامــــــــــــــــــــــــــــــــــــــــــه : لست من كتب الكود


// returns bit reverse of (x as n bits)
unsigned long
rev (unsigned long x, unsigned int n)
{
// this would better with a #if etc
if (sizeof (unsigned long) * 8 == 32)
{
x = ((x >> 16) | (x << 16));
x = (((x >> 8) & 0x00FF00FF) | ((x << 8) & 0xFF00FF00)); // on x86 could use asm BSWAP (ie change endian form)
x = (((x >> 4) & 0x0F0F0F0F) | ((x << 4) & 0xF0F0F0F0));
x = (((x >> 2) & 0x33333333) | ((x << 2) & 0xCCCCCCCC));
x = (((x >> 1) & 0x55555555) | ((x << 1) & 0xAAAAAAAA)); // can reverse the lines above , may be possible to do in any order
x >>= (32 - n);
}
else if (sizeof (unsigned long) * 8 == 64)
{
x = ((x >> 32) | (x << 32));
x = (((x >> 16) & 0x0000FFFF0000FFFF) | ((x << 16) & 0xFFFF0000FFFF0000)); // probably asm for this ?
x = (((x >> 8) & 0x00FF00FF00FF00FF) | ((x << 8) & 0xFF00FF00FF00FF00)); // change endian form ?
x = (((x >> 4) & 0x0F0F0F0F0F0F0F0F) | ((x << 4) & 0xF0F0F0F0F0F0F0F0));
x = (((x >> 2) & 0x3333333333333333) | ((x << 2) & 0xCCCCCCCCCCCCCCCC));
x = (((x >> 1) & 0x5555555555555555) | ((x << 1) & 0xAAAAAAAAAAAAAAAA));
x >>= (64 - n);
}
return x;
}

(f)

CIONO1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طيب السؤال هذا كان كل شخص يقدر يجاوب عليه لو فتح عينه كويس على السؤال و شاف اني ما قلت فيه ( ممنوع استخدام الحلقة )، ليش ما فيه احد استخدم حلقة ؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:D :D :D

هي ياشباب .. حاولت أحل هذه المسألة وتوصلت إلى نتيجة مشابهة لأحد الاجابات السابقة .. بس طلعت هي سهلة ..::

اجابتي هي :

 
void bitreverse(int &a)
{
a = a >> 16 | a << 16;
a = (a & 0xff00ff00) >> 8 | (a & 0x00ff00ff) << 8;
a = (a & 0xf0f0f0f0) >> 4 | (a & 0x0f0f0f0f) << 4;
a = (a & 0xcccccccc) >> 2 | (a & 0x33333333) << 2;
a = (a & 0xaaaaaaaa) >> 1 | (a & 0x55555555) << 1;
}

الفكرة جدا بسيطة وهي التالية :

من أجل قلب بتات عدد من 32 بت مثلا هي عبارة عن قلب أول 16 بت مع ثاني 16 بت ومن ثم كل 16 بت يتم فلبها كالتالي : قلب 8 بت ب 8 بت و ال 8 يتم قلبهم 4 ب 4 و الأربعة يتم قلبها 2 ب 2 و أخيرا يتم قلب البتين .. في النهاية سوف نحصل على العدد المقلوب ..

ممكن للطريقة السابقة أن تتم بصورة عكسية أيضا ..

والكود السابق تماما يمثل الكلام الذي ذكرته .. حيث السطر الأول يقوم بقلب ال 16 بت و التاني يقوم من أجل كل 16 بت بقلب ال 8 بت وهكذا حتى السطر الاخير الذي يقوم بقلب كل بتين متجورين ..

:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

مشكور اخ هاني (f) (f) (f)

2:1 لصالحك . :'( :'(

:D

CIONO1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .