الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الفائدة العملية لعمليات الـByte shifting مثل >> و << ؟

بدأه Mr.B في 8 مارس 2012 · 1 رد · 640 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أولاُ كي يكون الموضوع مفيد ومفهوم من الجميع سأشرح موضوع إزاحة البايتات byte shifting.

يقابل 11 في النظام الثُنائي 1011. إذا كُنت تستخدم Python يمكنك الكتابة في محثّ التشغيل :

$ pythonPython 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> b = lambda x : bin(x).replace('0b','')
>>> b(11)
'1011'
>>>

وسترى النتيجة. عمليّة الـByte shifting تعني إزاحة تلك البايتات لليمين أو اليسار بمقدار معيّن. فمثلأ الإزاحة لليسار تُكتب بالصيغة التالية (نفس الصيغة تقريبا في كل اللغات):

number << shift by

وستقوم بإزاحة بايتات الرقم number بعدد shift by. كما ذكرت أنّ الرقم 11 يقابل 1011 ولو قُمنا بعمل إزاحة له بمقدار 2 , سينتج 44 إنظر هُنا:

>>> 11 << 244
>>> b(11)
'1011'
>>> b(44)
'101100'
>>>

ما حصّل أنه جرى سحب 1011 لليسار وأضيف صفرين 00 يشغلان هذا المكان 101100. ولو كتبنا 3 بدل 2 سينتج 88 :

>>> b(11)'1011'
>>> 11 << 3
88
>>> b(88)
'1011000'
>>>

أضيفت 3 أصفار لـ1011 لينتج 1011000 والتي تقابل 88.

بالنسبة للإزاحة لليمن, فهي نفس الفكرة, عدا أنها تحذف من جهة اليمين وتكتب بالصيغة :

number >> shift by

فمثلأ لو قُمنا بإزاحة الرقم 11 لليمين مقدار 3 سينتج 1, إنظر هُنا :

>>> b(11)'1011'
>>> 11 >> 3
1
>>> b(1)
'1'
>>>

ﻻجظ أنّ هذا الجزء 1011 حُذف وبقي 1 (في الواقع أن أصفار أضيفت لليسار لكنّ الصفر على اليسار ﻻ فائدة له). لو قُمنا بالإزاحة بمقدار 4, لن يبقى سوى الصفر , إنظر :

>>> b(11)'1011'
>>> 11 >> 4
0
>>> b(0)
'0'
>>>

حذف الجزء 1011 كامل. الفكرة بسيطة وليست مُعقدة.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

الجانب النظري بسيط وليس معقدّ, لكن ما أودّ أعرفه ما الفائدة العملية في الحياة الحقيقية للإزاحة وكيف يمكنني أن أستفيد منها ؟ أرى أنها مُستخدمه كثيراً في التشفير والـhashing لكن لم تُستخدم؟

أعرف قليلاً في C, Python, Assembly لذا يمكنك مخاطبتي بأي منها.

#2

أحد استخداماتها

عند مضاعفة الأعداد تكون أسرع من عملية الضرب العادية

أقصد أن وقت المعالجة يفرق كثيرا

لو تريد تضرب في 2 أو 4 أو 8

فقط تعمل إزاحة

أيضا إذا أردت أن تقسم عدد على 2 أو 4 أو 8

فقط تعمل إزاحة

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

هذي أحد الاستخدامات

للتوسع:

Bitwise operation في ويكيبيديا

جواب لنفس سؤالك في stackoverflow

تم تعديل هذه المشاركة بواسطة بـارع في 8 مارس 2012 في 22:52

1

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…