PDA

View Full Version : سوال: معني علامت | اينجا چيه ؟



Programmer 1
سه شنبه 13 مهر 1389, 21:18 عصر
سلام ،

اين كد رو ملاحظه بفرماييد :



richTextBox1.SelectionFont = new Font(richTextBox1.Font,
FontStyle.Bold | FontStyle.Underline);
richTextBox1.SelectionColor = Color.Red;

همه جا رو متوجه شدم ولي طبق منطق خودم مي گم كه به جاي علامت | بايد از & استفاده بشه ، يعني فونت Bold باشه و همچنين زير خط دار باشه ، نه اينكه از يا استفاده كنيم ، لطفا توضيحي در اين مورد بديد .

با تشكر /.

AmirAmiri
سه شنبه 13 مهر 1389, 21:29 عصر
همون | درسته.
رجوع کن به درسه سخت افزار یا مدار منطقی.

Programmer 1
سه شنبه 13 مهر 1389, 22:04 عصر
همون | درسته.
رجوع کن به درسه سخت افزار یا مدار منطقی.

دوست عزير همون صد درصد دسته ولي شما اگه ميشه همون رو بخون ( توضيح بده )

سروش ربیعی
سه شنبه 13 مهر 1389, 22:17 عصر
| عملگر یای مانع جمع (XOR) باینری هست. یعنی بیت‌های دو دنباله از بیت‌ها با هم xor می‌شن. اگر ۱ باشه میشه ۰ و اگر ۰ باشه میشه ۱.
مثال:


1010b|1110b=1110bیه کاربرد خاصی هست که بهش میگن binary enumeration packaging یعنی شما میای توان‌های ۲ رو به یه enum اختصاص میدی. بعد با جمع منطقی اون‌ها ترکیب یکتاشون رو به دست میاری. یعنی هر ۱ در حاصل جمع منطقی نمایندۀ حضور یکی از enumهاست. تو مثال خودت Bold و Underline به ترتیب 1 و 8 هستن. یعنی 000001b و 001000b برای بقیه‌ی اعضای اون enum هم توان‌های دیگه هست. وقتی یای bitwise می‌گیری حاصلش میشه 001001b که 1 اول یعنی Underline روشنه و یک دوم یعنی Bold روشنه. حالا اگه دوباره با Bold یا بگیری 1 دوم خاموش میشه. یعنی 0 میشه.

ببین از این enum ها تو NET زیاده. سعی کن مقادیرشونو پیدا کنی تا خودت بهتر متوجه بشی.
و سعی کن از این روش خودت هم استفاده کنی. مثلاً وقتی پارامترهای زیادی داری که میخوای روشن/خاموش بشن. مثل همین ویژگی‌های فونت.

AmirAmiri
سه شنبه 13 مهر 1389, 22:20 عصر
دوست عزير همون صد درصد دسته ولي شما اگه ميشه همون رو بخون ( توضيح بده )
چشم عزیزم توضیح میدم.

شما اول این رو امتحان کنید و بعد ادامه مطلب رو بخونید :
textBox1.Text = (32 | 64).ToString();
textBox2.Text = (32 & 64).ToString();


زمانی که شما دو عدد رو با هم | (OR) میکنید در واقع دارید اون دو مقدار رو با هم جمع میکنید و زمانی که دو مقدار رو با هم & (AND) میکنید به عبارتی دارید اونها رو در هم ضرب میکنید که این ماله سخت افزار (مدار منطقی) هستش ولی اگه توضیح واضح میخوای باید بگم که:
عدد 32 به مبنای دو میشه = 100000
عدد 64 در مبنای دو میشه = 1000000
زمانی که این دو با هم OR بشن عدد حاصله میشه = 1100000
که عدد 1100000 برابر است با عدد 96 در مبنای ده دهی (decimal)

اما همین دو تا عدد رو با هم AND میکنیم و نتیجه میشه = 0

چرا؟
چون زمانی که دو چیز رو با هم AND میکنی به این معنیه که بیتها تک به تک با هم مقایسه میشن و بیت های 1 به عنوان جوابه درست استخراج میشن :


1 & 1 = 1
1 & 0 = 0
0 & 0 = 0

1 | 1 = 1
1 | 0 = 1
0| 0 = 0حالا فرض کن FontStyle.Bold همون عدد 32 باشه و FontStyle.Underline هم همون عدد 64 باشه. چطوری اینارو با هم جمع کنیم؟ با | میشه اینکارو کرد. اما اگه & کنیم نتیجه چی میشه؟

موفق باشی.

AmirAmiri
سه شنبه 13 مهر 1389, 22:23 عصر
| عملگر یای مانع جمع (XOR) باینری هست. یعنی بیت‌های دو دنباله از بیت‌ها با هم xor می‌شن. اگر ۱ باشه میشه ۰ و اگر ۰ باشه میشه ۱.
مثال:


1010b|1110b=1110bیه کاربرد خاصی هست که بهش میگن binary enumeration packaging یعنی شما میای توان‌های ۲ رو به یه enum اختصاص میدی. بعد با جمع منطقی اون‌ها ترکیب یکتاشون رو به دست میاری. یعنی هر ۱ در حاصل جمع منطقی نمایندۀ حضور یکی از enumهاست. تو مثال خودت Bold و Underline به ترتیب 1 و 8 هستن. یعنی 000001b و 001000b برای بقیه‌ی اعضای اون enum هم توان‌های دیگه هست. وقتی یای bitwise می‌گیری حاصلش میشه 001001b که 1 اول یعنی Underline روشنه و یک دوم یعنی Bold روشنه. حالا اگه دوباره با Bold یا بگیری 1 دوم خاموش میشه. یعنی 0 میشه.

ببین از این enum ها تو NET زیاده. سعی کن مقادیرشونو پیدا کنی تا خودت بهتر متوجه بشی.
و سعی کن از این روش خودت هم استفاده کنی. مثلاً وقتی پارامترهای زیادی داری که میخوای روشن/خاموش بشن. مثل همین ویژگی‌های فونت.


دوست عزیز | عملگر XOR نیست بلکه OR هستش.

Mohandes2009
سه شنبه 13 مهر 1389, 22:29 عصر
به معنی یا است

سروش ربیعی
سه شنبه 13 مهر 1389, 22:33 عصر
اه! راست میگی...
bitwise xor اینجوریه:
^