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

أسئلة حول ال bitwise !

بدأه khaled_prg في 8 أغسطس 2010 · 7 رد · 802 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قرأت في كتاب الشامل (الصفحة 59/الإصدار الثاني) ما يلي:

اقتباس
المؤثر NOT (~), لا يُستعمل هذا المؤثر لوحده, و يُستعمل بكثرة مع المؤثر AND لتثبيت بت ما على 0 دون التأثير على باقي البتات.و مثالا على ذلك : إذا كانت لدينا القيمة 1 في بت ثالث نريد تصفيره فسيكون ذلك كالتالي:

#include<stdio.h>
int main()
{
int x=5;//5 decimal = 101 binary
x=x&~4;//4 decimal = 100 binary
printf("%d",x);//x= 001 in binary = 1 in decimal
return 0;
}

أسئلتي هي:

1-كيف يقول المؤلف أن المؤثر ~ لا يُستعمل لوحده !؟

قرأتُ سابقا مقالة للأخ خالد الشايع قال فيها أن المؤثر ~ هو المتمم و يمكننا استعماله لوحده لنحصل على متمم المتغير المرافق للمؤثر !!

2-كيف يقول المؤلف أنه يريد تصفير البت الثالث و قد قام بتصفير البت الأول !!؟

3-هل توجد قاعدة ثابتة يجب اتباعها من أجل تصفير أحد بتات المتغير !؟ و ما هي !؟

4-هل يُمكننا استخدام المؤثر | مع المؤثر ~ !؟

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

سؤال مستقل:

نعلم أن مؤثر الإزاحة لليمين له نفس شكل معامل الإدخال و كذلك مؤثر الإزاحة لليسار له نفس شكل معامل الإخراج !

هل مؤثر الإزاحة هو نفسه معامل (الإدخال/الإخراج) أم لا !؟

و إذا كان الجواب "لا" فكيف نجد معامين لهما نفس الشكل و يختلفان من حيث العمل !؟

سلامي :)

تم تعديل هذه المشاركة بواسطة khaled_prg في 8 أغسطس 2010 في 17:29

1
#2

بالنسبة للسؤال الأول, أعتقد أن المؤلف - غفر الله له - يقصد "غالبا",,, أي أنه غالبا لايتم إستخدامه وحده, وإلا ما يمنع من ذلك؟

1
#3
اقتباس
1-كيف يقول المؤلف أن المؤثر ~ لا يُستعمل لوحده !؟

هو يعلم أنه يستعمل لوحده ، لكن لعله قصد أنه في معظم الأحيان يستخدم بالتزامن مع AND لعمل Masking

اقتباس
2-كيف يقول المؤلف أنه يريد تصفير البت الثالث و قد قام بتصفير البت الأول !!؟

البت الثالث هو ما تم تصفيره بالفعل ( لعلك قمت بالعد من اليسار ) :

101 أصبحت 001

اقتباس
3-هل توجد قاعدة ثابتة يجب اتباعها من أجل تصفير أحد بتات المتغير !؟ و ما هي !؟

للتصفير استخدم AND ، الخانات المراد تصفيرها اجعل المقابل لها 0 والباقي 1 ، أو اجعل المقابل لها 1 والباقي 0 لكن لا تنسى عكس المعامل الذي تريد عمل anding معه ( باستخدام ~ ) ، كما في المثال الذي ذكرته ..

اقتباس
4-هل يُمكننا استخدام المؤثر | مع المؤثر ~ !؟

المؤثر | استخدامه عكس المؤثر & ، أي يستخدم لجعل البتات 1 وليس 0 ، إذا عملت | مع 15 ( 0x0f ) ( دون ~ ) ، أما إذا استخدمت ~ مع | فالناتج -1 دائماً .. لأن ~ تستخدم مع & فقط واستخدامها مع | بعطينا نتائج خاطئة .

تم تعديل هذه المشاركة بواسطة namespace في 8 أغسطس 2010 في 19:27

1

البرمجة = الرياضيات

#4

أفضل ما قرأت :

The ~ operator

The ~ (Ones Complement or inversion) operator acts only on one value and it inverts it, turning all the ones int zeros, and all the zeros into ones. An ideal use of this would be to set certain bytes to zero, and ensuring all other bytes are set to one, regardless of the size of the data.

Another ideal use, is to combine it with the & operator to ensure that certain bits are set to zero

المزيد من الأمثلة هناك .

1

البرمجة = الرياضيات

#5

بقي سؤال : ) :

اقتباس
نعلم أن مؤثر الإزاحة لليمين له نفس شكل معامل الإدخال و كذلك مؤثر الإزاحة لليسار له نفس شكل معامل الإخراج !

هل مؤثر الإزاحة هو نفسه معامل (الإدخال/الإخراج) أم لا !؟

و إذا كان الجواب "لا" فكيف نجد معامين لهما نفس الشكل و يختلفان من حيث العمل !؟

مؤثر الإزاحة << و >> ، يمكن إعادة تعريفهما وبالتالي تغيير طريقة عملهما في البرمجة الكائنية ، فتستطيع أن تتخيّل أنهما دالتان بالنسبة للكائن cout و cin . اقرأ عن Operator Overloading وهو موضوع متقدم قليلاً .

1

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

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

اخي الفاضل خالد.

موضوع ومثال يرتبط بهذا الموضوع ربما يعود بالفائدة ان شاء الله...

من هـ;ـا

الموضوع متوسط بعض الشيء!!

موفق يارب :happy:

1

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#7
الشمري كتب:

بقي سؤال : ) :

مؤثر الإزاحة << و >> ، يمكن إعادة تعريفهما وبالتالي تغيير طريقة عملهما في البرمجة الكائنية ، فتستطيع أن تتخيّل أنهما دالتان بالنسبة للكائن cout و cin . اقرأ عن Operator Overloading وهو موضوع متقدم قليلاً .

أي نعم ، وبشكل أبسط :

int x = 5, y = 10, z = 15;
x = z - x;
z = - y;

هل تلاحظ أن الإشارة - تعامل معها مرة على أنها إشارة الطرح subtraction ومرة أخرى على أنها إشارة السالب negative

ويميز الـ compiler بينهما من السياق ، كذلك الأمر بالنسبة لـ >> و << السياق هو الذي يحدد ..

تم تعديل هذه المشاركة بواسطة namespace في 9 أغسطس 2010 في 12:12

البرمجة = الرياضيات

#8

السلام عليكم

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

سلامي و احترامي :)

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