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


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.