বিটওয়াইস-ওআর বনাম ফ্ল্যাগ যুক্ত করা


16

আমি অন্যদের আগে বিটওয়াইয়ার-ওআর ব্যবহার করে পতাকাগুলি একত্রিত করতে দেখেছি:

#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04

const byte madPerson = RUN | JUMP | SHOOT;

আমি এটি করার উপায়ও এটি।

তবে আমি কয়েকটি ব্যবহার করে (খুব বেশি নয়) সংযোজন ব্যবহার করে পতাকাও একত্রিত করেছি:

#define RUN 0x01
#define JUMP 0x02
#define SHOOT 0x04

const byte madPerson = RUN + JUMP + SHOOT;

কোনটি আরও "পাঠযোগ্য"? (আপনি কী ভাবেন যে আরও বেশি লোক চিনবে?) এটি করার "মানক" উপায় কী? আপনি কোনটি নিবেন?


এটি একটি SO প্রশ্ন। ভালো কিছু ব্যবহার করার কথা বিবেচনা 1<<0, 1<<1, 1<<2, ইত্যাদি। আপনার অনেকগুলি পতাকা থাকলে এটি আরও পঠনযোগ্য, আরও রক্ষণাবেক্ষণযোগ্য, কম ত্রুটি-প্রবণ হয়ে ওঠে। উদাহরণস্বরূপ, আপনি যদি 64 বিট ইন্টের সমস্ত 64 বিট প্যাক করে থাকেন তবে আপনি সত্যিই টাইপগুলি এড়াতে চান :) আপনি কীভাবে উপস্থাপন করবেন 1তাও গুরুত্বপূর্ণ। ভিএস 2010-তে 64 বিটের পূর্ণসংখ্যার জন্য আমি মনে করি এটি 1UI64বা এটির মতো something কোনও ভুল ধরণের ব্যবহার আপনাকে দংশন করতে পারে।
কাজ

3
@ জোব: স্ট্যাক ওভারফ্লো প্রশ্ন নয়, কারণ এটি পাঠযোগ্যতা, স্বীকৃতি, পছন্দ এবং সর্বোত্তম অনুশীলন সম্পর্কে জিজ্ঞাসা করছে। এর জন্য কোনও একক উদ্দেশ্য উত্তর নেই; এটা এখানে।
ম্যাকনিল

উত্তর:


34

Bitwise-বা।

সংযোজন বিপজ্জনক।

দস্যু ব্যক্তি হলেন এমন একটি উদাহরণ বিবেচনা করুন এবং ক্রুদ্ধ দস্যু এমন ডাকাত যা কথা বলে এবং গুলি চালায়। পরে, আপনি সিদ্ধান্ত নিন যে সমস্ত ডাকাত গুলি করা উচিত, তবে আপনি রাগী ডাকাত সংজ্ঞাটি ভুলে গেছেন এবং এর শুটিং পতাকাটি মুছে ফেলবেন না।

#define PERSON 1 << 0
#define SPEAKS 1 << 1
#define SHOOTS 1 << 2
#define INVINCIBLE 1 << 3
const byte bandit = PERSON | SHOOTS;                    // 00000101
const byte angryBandit_add = bandit + SPEAKS + SHOOTS;  // 00001011 error
const byte angryBandit_or = bandit | SPEAKS | SHOOTS;   // 00000111 ok

যদি আপনি angryBandit_addআপনার গেমটি ব্যবহার করেন তবে এখন রেগে থাকা ডাকাতরা গুলি করতে বা হত্যা করতে পারছে না বলে বিভ্রান্তিকর যুক্তিযুক্ত ত্রুটি ঘটবে।

আপনি যদি angryBandit_orসবচেয়ে খারাপ ব্যবহার করেন তবে এটি একটি অতিরিক্ত কাজ | SHOOTS

অনুরূপ কারণে, বিটওয়াইজ ফ্ল্যাগগুলি অপসারণের জন্য বিয়োগের চেয়ে নিরাপদ নয়।


11

বিটওয়াইস-ওআরটি আরও স্পষ্টভাবে জানায়

এছাড়াও, বিটওয়াইস-ওআর আরও দক্ষ হওয়া উচিত


+1 প্রকৃতপক্ষে আমি এটিও মনে করি যে ওআর এটি আরও পরিষ্কার করে দেয় যে এটি পতাকাগুলি, তবে দক্ষতার বিষয়ে এমন ভাষা রয়েছে যেখানে বিটওয়াইজ অপারেশনগুলি ধীরে ধীরে রয়েছে, যেমন জাভাস্ক্রিপ্টের সমস্ত নম্বর 64৪ টি ফ্ল্যাট বিটওয়াইস অপারেটরগুলির উপর সেগুলিকে প্রকট রূপান্তর করতে হবে।
ইভো ওয়েটজেল

1
ওপির উদাহরণ দেওয়া, আমি মনে করি না যে ওআরএস এর একটি লাইন বা সংযোজন কোনও প্রোগ্রামের সম্পাদনের গতিতে বিরূপ প্রভাব ফেলবে।
টিন ম্যান

1
@ গ্রেগ: বিশেষত যেহেতু সেই উদাহরণের গণনাটি সংকলন সময়ে করা হবে। :-)
কারসন 63000

অভিপ্রায় প্রকাশের পাশাপাশি এটি এডিএ, সি #, জাভা সহ সীমাবদ্ধ নয় এমন অনেকগুলি ভাষায় এটি দেখা মোটামুটি সাধারণ বিষয় ...
কেন হেন্ডারসন

2
"উচিত" এই ব্যবসায়ের একটি খুব বড় শব্দ। আপনি আজ এই সমস্যাটির মুখোমুখি হবেন এমনটি অসম্ভাব্য হলেও, আমার কাছে এমন একটি প্রসেসরের উপর কাজ করার খুব স্পষ্ট স্মৃতি রয়েছে যার বিটওয়াইস-বা নির্দেশনা ছিল না। আপনি বিটওয়াইস-ও একটি নির্দেশে, এবং আপনি একটি নির্দেশে বিটওয়াইস-এক্সওর করতে পারেন, তবে বিটওয়াইস-ও দুটি নিয়েছিলেন: তাত্ক্ষণিকভাবে বিটওয়াইস-এবং বিটটি বন্ধ করতে এবং তাত্ক্ষণিক বিটওয়াইস-এক্সওর নতুন সজ্জিত বিটকে পরিপূর্ণ করতে , অবশ্যই এটি সেট।
জন আর স্ট্রোহ্ম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.