التلاعب بالبت

التلاعب بالبتات هو عملية التلاعب بالبتات أو قطع البيانات الأخرى الأقصر من كلمة بطريقة خوارزمية . تتضمن مهام برمجة الكمبيوتر التي تتطلب التلاعب بالبتات التحكم في الأجهزة منخفضة المستوى، وخوارزميات اكتشاف الأخطاء وتصحيحها ، وضغط البيانات ، وخوارزميات التشفير ، والتحسين . بالنسبة لمعظم المهام الأخرى، تسمح لغات البرمجة الحديثة للمبرمج بالعمل مباشرة مع التجريدات بدلاً من البتات التي تمثل تلك التجريدات.

يستخدم الكود المصدري الذي يقوم بالتلاعب بالبتات العمليات الخاصة بالبتات : AND وOR وXOR وNOT، وربما عمليات أخرى مماثلة لمشغلات البوليان؛ وهناك أيضًا عمليات تحويل البتات وعمليات لحساب الواحدات والأصفار، والعثور على الواحد أو الصفر المرتفع والمنخفض، وتعيين وإعادة تعيين واختبار البتات، واستخراج الحقول وإدراجها، وإخفاء حقول الصفر، وجمع وتشتيت البتات من وإلى مواضع أو حقول بتات محددة. يمكن لمشغلات الحساب الصحيحة أيضًا أن تؤثر على عمليات البتات بالتزامن مع المشغلات الأخرى.

في بعض الحالات، قد يؤدي التلاعب بالبتات إلى تجنب أو تقليل الحاجة إلى التكرار عبر بنية البيانات ويمكن أن يؤدي إلى تسريعات متعددة، حيث تتم معالجة التلاعبات بالبتات بالتوازي.

مصطلحات

غالبًا ما يتم استخدام العبث بالبت ، والتلاعب بالبت ، وضرب البت ، والجمباز بالبت بشكل متبادل مع التلاعب بالبت، ولكنها في بعض الأحيان تشير حصريًا إلى طرق أو استخدامات ذكية أو غير واضحة للتلاعب بالبت، أو مهام معالجة بيانات التحكم في الأجهزة منخفضة المستوى المملة أو الصعبة .

يعود مصطلح "العبث بالبتات" إلى أجهزة الكمبيوتر المبكرة ، حيث كان مشغلو الكمبيوتر يقومون بإجراء التعديلات عن طريق تعديل عناصر التحكم في الكمبيوتر أو التلاعب بها . ومع تطور لغات برمجة الكمبيوتر، تبنى المبرمجون المصطلح ليعني أي معالجة للبيانات تتضمن حسابًا على مستوى البتات .

عملية بتية

تعمل عملية البت على نمط بت واحد أو أكثر أو أرقام ثنائية على مستوى البتات الفردية الخاصة بها . إنها عملية سريعة بدائية مدعومة مباشرة من وحدة المعالجة المركزية (CPU)، وتستخدم للتلاعب بالقيم للمقارنات والحسابات.

في أغلب المعالجات، تتم أغلب العمليات التي تتم على أساس البتات في دورة واحدة - أسرع بشكل كبير من عمليات القسمة والضرب والتفريع. وفي حين تقوم المعالجات الحديثة عادةً بإجراء بعض العمليات الحسابية والمنطقية بنفس سرعة العمليات التي تتم على أساس البتات نظرًا لخطوط التعليمات الأطول والخيارات الأخرى في التصميم المعماري ، فإن العمليات التي تتم على أساس البتات تستخدم عادةً قدرًا أقل من الطاقة بسبب الاستخدام المنخفض للموارد.

مثال على التلاعب بالبت

لتحديد ما إذا كان الرقم قوة للرقم 2، يمكننا من الناحية النظرية تكرار عملية قسمة عدد صحيح على اثنين حتى لا يقسم الرقم على 2 بالتساوي؛ إذا كان العامل الوحيد المتبقي هو 1، فإن الرقم الأصلي كان قوة للرقم 2. باستخدام البت والمشغلات المنطقية، يوجد تعبير بسيط سيعيد القيمة true (1) أو false (0):

bool isPowerOfTwo = ( x != 0 ) && (( x & ( x - 1 )) == 0 );             

يستخدم النصف الثاني حقيقة أن قوى الاثنين لها بت واحد فقط في تمثيلها الثنائي:

س == 0...0 1 0...0
س-1 == 0...001...1
x & (x-1) == 0...000...0

إذا لم يكن الرقم صفرًا ولا قوة للاثنين، فسيكون له "1" في أكثر من مكان:

س == 0... 1 ...0 1 0... 0
x-1 == 0... 1 ...001...1
x & (x-1) == 0... 1 ...000...0

إذا تم استخدام كود لغة التجميع المضمنة ، فقد تكون هناك تعليمات ( popcnt ) تحسب عدد 1 أو 0 في المتغير؛ المتغير الذي يحتوي على بت واحد فقط "1" هو قوة 2. ومع ذلك، قد يكون لهذه التعليمات زمن انتقال أكبر من طريقة البتات الموضحة أعلاه.

عمليات معالجة البتات

توفر المعالجات عادةً مجموعة فرعية فقط من مشغلات البت المفيدة. لا تدعم لغات البرمجة معظم عمليات البت بشكل مباشر، لذا يجب استخدام التعابير الاصطلاحية لترميزها. على سبيل المثال، توفر لغة البرمجة "C" فقط معاملات AND(&) وOR(|) وXOR(^) وNOT(~) على مستوى البت. توفر لغة Fortran معاملات AND(.and.) وOR(.or.) وXOR(.neqv.) وEQV(.eqv.). توفر لغة Algol استخراج حقل البت وإدراجه نحويًا. عندما توفر اللغات عمليات بت لا تتوافق بشكل مباشر مع تعليمات الأجهزة، يجب على المترجمين تجميع العملية من المشغلات المتاحة.

تعد عملية العد التي تبدأ بالأصفار مفيدة بشكل خاص وتستخدم للعثور على البت العالي في كلمة آلية، على الرغم من أنها قد يكون لها أسماء مختلفة في مختلف البنيات. [1] لا توجد لغة برمجة بسيطة، لذلك يجب توفيرها بواسطة روتين داخلي للمترجم أو روتين مكتبة النظام. بدون هذا المشغل، يكون إجراء أي عمليات فيما يتعلق بالبت العالي في الكلمة مكلفًا للغاية (انظر العثور على المجموعة الأولى # CLZ ) بسبب الحمل غير المتماثل والانتشار للعمليات الحسابية. لحسن الحظ، قدمت معظم بنيات وحدة المعالجة المركزية ذلك منذ منتصف الثمانينيات. عادةً ما يتم توفير عملية مصاحبة count ones ، والتي تسمى أيضًا POPCOUNT، والتي تحسب عدد البتات المحددة في كلمة آلية، كمشغل أجهزة. غالبًا ما يتم توفير عمليات البت البسيطة مثل تعيين البت وإعادة الضبط والاختبار والتبديل كمشغلات للأجهزة، ولكن يمكن محاكاتها بسهولة إذا لم تكن كذلك - على سبيل المثال (SET R0، 1؛ LSHFT R0، i؛ OR x، R0) يضع البت i في المتغير x.

تتضمن بعض عمليات البت الأكثر فائدة وتعقيدًا والتي يجب ترميزها كتعبيرات اصطلاحية في لغة البرمجة وتوليفها بواسطة المترجمين ما يلي:

  • مسح من موضع البت المحدد لأعلى (اترك الجزء السفلي من الكلمة)
  • مسح من موضع البت المحدد إلى الأسفل (اترك الجزء العلوي من الكلمة)
  • قناع من الجزء السفلي إلى الأسفل (مسح الكلمة السفلية)
  • قناع من الجزء العلوي إلى الأعلى (مسح الكلمة السفلية)
  • استخراج حقل البت
  • إدراج حقل البت
  • عمليات تشتيت/تجميع حقول البتات التي توزع أجزاء متجاورة من حقل بتات على كلمة آلية، أو تجمع حقول بتات متفرقة في الكلمة في جزء متجاور من حقل بتات (انظر مشغلي Intel PEXT/PDEP الحديثين). تستخدمها التشفير وترميز الفيديو.
  • عكس المصفوفة

يمكن اختصار بعض العمليات الحسابية إلى عمليات أبسط وعمليات بت:

  • تقليل الضرب بالثابت إلى تسلسل التحويل والإضافة

على سبيل المثال، الضرب في 9 هو نسخ للمتغير، ثم التحويل لأعلى بـ 3 (الضرب في 8)، ثم الإضافة إلى المتغير الأصلي.

  • تقليل القسمة على ثابت إلى تسلسل التحويل والطرح

الإخفاء

القناع هو عبارة عن بيانات يتم استخدامها للعمليات التي تتم على أساس البت ، وخاصة في حقل البت .

باستخدام قناع، يمكن ضبط عدة بتات في بايت أو nibble أو كلمة (إلخ) إما على وضع التشغيل أو الإيقاف أو عكسها من وضع التشغيل إلى الإيقاف (أو العكس) في عملية بتية واحدة. تُسمى التطبيقات الأكثر شمولاً للقناع، عند تطبيقها بشكل مشروط على العمليات، بالتنبؤ .

انظر أيضا

مراجع

  1. ^ في معظم شرائح Intel، يكون الأمر BSR (bitscan reverse)، على الرغم من أن أنظمة SoCs الأحدث تحتوي أيضًا على LZCNT (عد الأصفار الأولية)

قراءة إضافية

  • وارن، هنري س. (2013). متعة القراصنة (الطبعة الثانية). أديسون ويسلي بروفيشنال. ص 512. رقم ISBN 978-0321842688.
  • كنوث، دونالد إي. (2009). فن برمجة الكمبيوتر ، المجلد 4، المجلد 1: الحيل والتقنيات الثنائية؛ مخططات القرار الثنائي (الطبعة الأولى). أديسون ويسلي بروفيشنال. ص 272. رقم ISBN 978-0321580504.(مسودة المجلد 1أ المؤرشفة بتاريخ 2019-10-16 على موقع Wayback Machine متاحة للتنزيل)
  • أندرسون، شون إيرون، محرر. (2009-11-26) [1997]. "Bit Twiddling Hacks". جامعة ستانفورد . مؤرشف من الأصل في 2020-06-01 . تم الاسترجاع في 2020-06-01 .
  • حيل التلاعب بالبتات مع شرح كامل ورمز المصدر
  • دليل Intel Intrinsics
  • xchg rax, rax: ألغاز وحيل x86_64
  • خوارزميات السحر التجميعي من جامعة كنتاكي
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=التلاعب_بالبت&oldid=1180024786"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate