| = (একক পাইপ সমান) এবং & = (একক অ্যাম্পারস্যান্ড সমান) এর অর্থ কী


116

নীচের লাইনে:

//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;


Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System;

কী |=(একক পাইপ সমান) এবং &=(একক এম্পারসেন্ড সমান) গড় মধ্যে C #
আমি অন্যদের পালন সিস্টেম অ্যাট্রিবিউট সরাতে চান ...

উত্তর:


149

তারা যৌগিক কার্যনির্বাহী অপারেটর, অনুবাদ করছেন (খুব শিথিলভাবে)

x |= y;

মধ্যে

x = x | y;

এবং একই জন্য &। অন্তর্নিহিত castালাই সম্পর্কে কয়েকটি ক্ষেত্রে আরও কিছু বিশদ রয়েছে এবং লক্ষ্য পরিবর্তনশীলটি কেবল একবার মূল্যায়ন করা হয়, তবে এটি মূলত এর সূত্র।

অ যৌগিক অপারেটরগুলির বিবেচনায়, &"বিআর" |কিছুটা দিকের এবং কিছুটা "OR" হয় ।

সম্পাদনা: এই ক্ষেত্রে আপনি চান Folder.Attributes &= ~FileAttributes.System। কেন বুঝতে হবে:

  • ~FileAttributes.Systemএর অর্থ " ব্যতীত সমস্ত বৈশিষ্ট্য System" ( ~কিছুটা ধীরে ধীরে নয়)
  • & "" ফলাফলটি সমস্ত বৈশিষ্ট্য যা অপারেন্ডের উভয় পক্ষেই ঘটে "

সুতরাং এটি মূলত একটি মুখোশ হিসাবে কাজ করছে - কেবলমাত্র সেই বৈশিষ্ট্যগুলি বজায় রাখা উচিত ("সিস্টেম ব্যতীত সমস্ত কিছুই") উপস্থিত হয়। সাধারণভাবে:

  • |=লক্ষ্যগুলিতে বিটগুলি কেবল যোগ করবে
  • &=লক্ষ্য থেকে বিটগুলি কেবল সরিয়ে ফেলবে

2
x = x | (y);এটি বর্ণনা করার একটি ভাল উপায় কারণ এর x |= y + z;মতো নয়x = x | y + z;
— আয়রনমেনসান

উত্তরের জন্য ধন্যবাদ / তবে আমার উদ্দেশ্য (সিস্টেমের বৈশিষ্ট্য অপসারণ) এর জন্য আমি কোনটি ব্যবহার করব? (? = বা & =)?
— সিলভারলাইট

1
@ লস্টলর্ড:Folder.Attributes &= ~FileAttributes.System;
— জর্জ ডেকেট

33

a |= bসমতূল্য a = a | bতা ব্যতীত aশুধুমাত্র একবার মূল্যায়ন করা হয়
a &= bসমতূল্য a = a & bতা ব্যতীত aশুধুমাত্র একবার মূল্যায়ন করা হয়

অন্যান্য বিট পরিবর্তন না করে সিস্টেম বিট অপসারণ করতে, ব্যবহার করুন

Folder.Attributes &= ~FileAttributes.System;

~কিছুটা অবহেলা। আপনি সিস্টেম বিট ব্যতীত সমস্ত বিট 1 তে সেট করবেন will andএটি মাস্কের সাহায্যে সেট করা সিস্টেমকে 0 তে সেট করবে এবং অন্য সমস্ত বিট অক্ষত রাখবে কারণ 0 & x = 0এবং যে কোনওটির 1 & x = xজন্যx


1
এর অর্থ কী যা aকেবল একবার মূল্যায়ন করা হয়? কেন তার চেয়ে বেশি বার মূল্যায়ন করা হবে?
— রেশমফায়ার

@silkfire এই সংক্ষিপ্ত-সার্কিট মূল্যায়ন বলা হয়, দেখতে en.wikipedia.org/wiki/Short-circuit_evaluation
— Polluks

@ পল্লুকস a |= bআসলে a = a || bকি আসলে বোঝা যায় ?
— সিল্কফায়ার

@ সিলক্রফায়ার হ্যাঁ তবে একটি পাইপ এবং দুটি পাইপ বিনিময় করবেন না।
— পোলাক্স

3

আমি অন্যকে রাখার সাথে সিস্টেমের বৈশিষ্ট্যটি মুছে ফেলতে চাই ..

আপনি এটি এর মতো করতে পারেন:

Folder.Attributes ^= FileAttributes.System;

1
আমি মনে করি আপনি এটির জন্য একটি AND এর পরিবর্তে XOR ব্যবহার করতে চান।
— গেমজেল্ডা

কিছুটা বিভ্রান্ত / necessary প্রয়োজনীয় বা না
— সিলভারলাইট

@ লস্টলর্ড দু'টি পদ্ধতিই যথাসম্ভব আমি অবগত
— ক্রিস এস

@ ক্রিসস বিটটি ^= bitসেট করবে যদি এটি ইতিমধ্যে সেট &= ~bitনা করা থাকে, সেট না করে।
— ক্রনিকল

আপনি অবশ্যই একটি জোর ব্যবহার করতে চান না। যদি এটি চলে যায় তবে এটি ফিরিয়ে দেবে।
— জন লর্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.