السلام عليكم ورحمة الله وبركاته
أولاُ كي يكون الموضوع مفيد ومفهوم من الجميع سأشرح موضوع إزاحة البايتات 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 لذا يمكنك مخاطبتي بأي منها.