যেহেতু এগুলি কেন কার্যকর তা নিয়ে কেউই আলোচনা করেননি:
পতাকা নিয়ে কাজ করার সময় আমি বিটওয়াইজ অপারেশনগুলি প্রচুর ব্যবহার করি। উদাহরণস্বরূপ, যদি আপনি কোনও ক্রিয়াকলাপের পতাকাগুলি কোনও ক্রিয়াকলাপে পাস করতে চান (বলুন, File.Open()
রিড মোড এবং রাইট মোড উভয় সক্ষম করে) তবে আপনি সেগুলি একক মান হিসাবে পাস করতে পারেন could এটি প্রতিটি সম্ভাব্য পতাকাটি একটি বিটসেটের (বিট, শর্ট, ইনট বা লম্বা) এর নিজস্ব বিট বরাদ্দ করে সম্পন্ন হয়। উদাহরণ স্বরূপ:
Read: 00000001
Write: 00000010
সুতরাং আপনি যদি পড়তে এবং লিখতে পাস করতে চান তবে আপনি (পুনরায় | লিখন) পাস করবেন যা এরপরে দুটিকে একত্রিত করে
00000011
যা অন্য প্রান্তে যেমন ডিক্রিপ্ট করা যায়:
if ((flag & Read) != 0) { //...
যা চেক করে
00000011 &
00000001
যা ফিরে আসে
00000001
যা 0 নয়, তাই পতাকাটি READ নির্দিষ্ট করে।
আপনি বিভিন্ন বিট টগল করতে এক্সওআর ব্যবহার করতে পারেন। দিকনির্দেশীয় ইনপুটগুলি (উপরে, নীচে, বাম, ডান) নির্দিষ্ট করতে একটি পতাকা ব্যবহার করার সময় আমি এটি ব্যবহার করেছি। উদাহরণস্বরূপ, যদি কোনও স্প্রিট অনুভূমিকভাবে চলতে থাকে এবং আমি এটি ঘুরিয়ে ফেলা চাই:
Up: 00000001
Down: 00000010
Left: 00000100
Right: 00001000
Current: 00000100
আমি কেবলমাত্র (লেফট | রাইট) দিয়ে বর্তমান মানটি XOR করে যা এই ক্ষেত্রে বামদিক বন্ধ এবং রাইটটি চালু করবে।
বিট শিফটিং বেশ কয়েকটি ক্ষেত্রে কার্যকর।
x << y
হিসাবে একই
x * 2 y
আপনার যদি দুটি শক্তির দ্বারা দ্রুত গুন করতে হয় তবে 1-বিটকে শীর্ষ বিটে স্থানান্তর করার জন্য নজর রাখুন - এটি স্বাক্ষর না করা অবধি সংখ্যাটিকে নেতিবাচক করে তোলে। বিভিন্ন আকারের ডেটা নিয়ে কাজ করার সময় এটি দরকারী। উদাহরণস্বরূপ, চারটি বাইট থেকে পূর্ণসংখ্যা পড়া:
int val = (A << 24) | (B << 16) | (C << 8) | D;
ধরে নিই যে A হ'ল সবচেয়ে উল্লেখযোগ্য বাইট এবং সবচেয়ে কম ডি D এটি শেষ হবে:
A = 01000000
B = 00000101
C = 00101011
D = 11100011
val = 01000000 00000101 00101011 11100011
রঙগুলি প্রায়শই এইভাবে সঞ্চিত হয় (সর্বাধিক উল্লেখযোগ্য বাইটটি উপেক্ষা করা হয় বা আলফা হিসাবে ব্যবহৃত হয়):
A = 255 = 11111111
R = 21 = 00010101
G = 255 = 11111111
B = 0 = 00000000
Color = 11111111 00010101 11111111 00000000
মানগুলি আবার খুঁজে পেতে, বিটগুলি নীচে না হওয়া পর্যন্ত ডানদিকে সরিয়ে দিন, তবে অবশিষ্ট উচ্চ-অর্ডার বিটগুলি মাস্ক করুন:
Int Alpha = Color >> 24
Int Red = Color >> 16 & 0xFF
Int Green = Color >> 8 & 0xFF
Int Blue = Color & 0xFF
0xFF
হিসাবে একই 11111111
। তাই মূলত, রেডের জন্য, আপনি এটি করছেন:
Color >> 16 = (filled in 00000000 00000000)11111111 00010101 (removed 11111111 00000000)
00000000 00000000 11111111 00010101 &
00000000 00000000 00000000 11111111 =
00000000 00000000 00000000 00010101 (The original value)