বিট অপারেটর কিসের জন্য ভাল? [বন্ধ]


19

প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি প্রায়শই বিভিন্ন বিট অপারেটর (যেমন বিটওয়াইজ বাম- এবং ডান শিফট, বিটওয়াইস এবং, বা, এক্সওআর ...) নিয়ে আসে। এগুলি যদিও খুব বেশি ব্যবহৃত হয় না, বা কমপক্ষে আমার অভিজ্ঞতা হয়েছে। এগুলি কখনও কখনও প্রোগ্রামিং চ্যালেঞ্জ বা সাক্ষাত্কারের প্রশ্নগুলিতে ব্যবহার করা হয়, বা সমাধানের জন্য তাদের প্রয়োজনীয় সমাধান যেমন:

  • কোনও সমতা অপারেটর ব্যবহার না করে একটি ফাংশন তৈরি করুন যা trueদুটি মান সমান হলে ফিরে আসে
  • তৃতীয় ভেরিয়েবল ব্যবহার না করে দুটি ভেরিয়েবলের মান অদলবদল করুন

এগুলি আবার, সম্ভবত কয়েকটি আসল বিশ্বের ব্যবহার রয়েছে। আমি অনুমান করি যে তাদের দ্রুত হওয়া উচিত কারণ তারা সরাসরি নিম্ন স্তরে স্মৃতিচারণ করে।

বেশিরভাগ প্রোগ্রামিং ভাষায় এগুলি কেন পাওয়া যায়? কোন বাস্তব বিশ্বের ব্যবহার ক্ষেত্রে?


@ এন্টো - এর একটি সহজ উদাহরণ কোনও ক্লায়েন্টের কাছে 256 কেবি মূল্যবান ডেটা 256 শব্দের হারে (4096 বাইট) প্রেরণ করা হবে।
রামহাউন্ড

1
"কোনো সমতা অপারেটর ব্যবহার না করে, একটি ফাংশন যা সত্য ফেরৎ যখন দুটি মানের সমান তৈরি" - সি: return !(x-y);? আমি জানি
অ্যান্ড্রু আর্নল্ড

@ অ্যান্ড্রু: এটি একটি সমাধান তবে আপনি এটি বিটওয়াইড অপারেটরগুলির সাথেও করতে পারেন।
Anto

19
"এগুলি যদিও খুব বেশি ব্যবহার হয় না" - এ সম্পর্কে নিশ্চিত? আমি তাদের সব সময় ব্যবহার। আমরা সবাই আপনার সমস্যার ডোমেনে কাজ করি না।
এড এস

2
পুরো উত্তরের জন্য যথেষ্ট নয়, তবে কিছুটা ফিডিং না করে কোনও বাইটের শীর্ষ 4 বিট পড়ার চেষ্টা করুন এবং তারপরে বিবেচনা করুন যে কিছু ডেটা ফর্ম্যাট খুব শক্তভাবে প্যাক করা আছে।
ব্রেন্ডন লং

উত্তর:


53

না, তাদের অনেক বাস্তব-জগত অ্যাপ্লিকেশন রয়েছে এবং এটি কম্পিউটারে মৌলিক ক্রিয়াকলাপ।

তারা জন্য ব্যবহৃত হয়

  • চারপাশে বাইটের জাগলিং ব্লকগুলি যা প্রোগ্রামিং ভাষার ডেটা টাইপের সাথে খাপ খায় না
  • বড় থেকে সামান্য এডিয়ানে পিছনে পিছনে এনকোডিং স্যুইচ করা।
  • কিছু সিরিয়াল বা ইউএসবি সংযোগের জন্য 4 বাইটে 4 6 বিট টুকরো ডেটা প্যাকিং করা হচ্ছে
  • অনেকগুলি চিত্র বিন্যাসে প্রতিটি রঙের চ্যানেলকে বিভিন্ন পরিমাণে বিট দেওয়া হয়।
  • এম্বেড থাকা অ্যাপ্লিকেশনগুলিতে আইও পিনের সাথে জড়িত কিছু
  • ডেটা সংক্ষেপণ, যা প্রায়শই 8-বিট সীমানা সুন্দর ফিট করে না \
  • হ্যাশিং অ্যালগরিদম, সিআরসি বা অন্যান্য ডেটা অখণ্ডতা চেক।
  • জোড়া লাগানো
  • Psuedorandom নম্বর উত্পাদন
  • রেইড 5 টি সামান্য গণনা করতে ভলিউমের মধ্যে বিটওয়াইজ এক্সওআর ব্যবহার করে।
  • টন আরও

প্রকৃতপক্ষে, যৌক্তিকভাবে, কম্পিউটারে সমস্ত ক্রিয়াকলাপগুলি শেষ পর্যন্ত প্রসেসরের বৈদ্যুতিক গেটগুলির মধ্যে সংঘটিত হয়ে এই নিম্ন স্তরের বিটওয়াইজ অপারেশনগুলির সংমিশ্রণে সিদ্ধ হয়।


1
আপনার বরং বিস্তৃত তালিকার জন্য +1, যা আপনি এমনকি যুক্ত করেছেন বলে মনে হচ্ছে
এন্টো

28
+1 টি। @ এন্টো: এই তালিকাটি বিস্তৃত কাছাকাছি কোথাও নেই । সিস্টেম প্রোগ্রামিংয়ে বিটওয়াইজ অপারেটরদের ক্ষেত্রে ব্যবহারের ক্ষেত্রে একটি বিস্তৃত তালিকা ব্যবসায়িক অ্যাপ্লিকেশনগুলিতে এসকিউএল প্রশ্নের জন্য একটি বিস্তৃত তালিকা হিসাবে দীর্ঘ। মজাদার ঘটনা: আমি বিটওয়াইজ অপারেশনগুলি সর্বদা ব্যবহার করি, তবে কয়েক বছরে এসকিউএল বিবৃতি
লিখি না

4
@ নিকি: এবং আমি সব সময় এসকিউএল লিখি, তবে বছরের পর বছর বিটওয়াইস অপারেটর ব্যবহার করিনি! :)
হতাশিত

3
আমি এম্বেড থাকা সিস্টেমে কাজ করি - বিটওয়াইজ অপারেটররা হ'ল রুটি এবং মাখনের স্টাফ। মোটেও কোনও চিন্তা ছাড়াই প্রতিদিন ব্যবহার করা।
দ্রুত_এইপ্রিল

9
যদি আমি মাঝে মাঝে এসকিউএল-তে বিটশিফিং ব্যবহার করি তবে আমি কি কোনও পুরস্কার পাব?
পিপীলিকা

13

কারণ তারা মৌলিক অপারেশন।

একই চিন্তার ধারায় আপনি যুক্তি দিতে পারেন যে সংযোজনের কয়েকটি বাস্তব-জগত ব্যবহার রয়েছে, কারণ এটি সম্পূর্ণ বিয়োগ (এবং অবহেলা) এবং গুণ দ্বারা প্রতিস্থাপন করা যেতে পারে। তবে আমরা সংযোজন রাখি কারণ এটি একটি মৌলিক অপারেশন।

এবং এক মুহুর্তের জন্য ভাববেন না যে কেবলমাত্র আপনি বিটওয়াইজ অপারেশনগুলির জন্য খুব বেশি প্রয়োজন দেখেননি এর অর্থ এই নয় যে সেগুলি প্রায়শই ব্যবহার করা হয় না। প্রকৃতপক্ষে, আমি বিট মাস্কিংয়ের মতো জিনিসের জন্য প্রায় প্রতিটি ভাষায় বিটওয়াইস অপস ব্যবহার করেছি।

আমার মাথার শীর্ষে, আমি ইমেজ প্রসেসিং, বিটফিল্ড এবং পতাকা, টেক্সট প্রসেসিং (উদাহরণস্বরূপ, নির্দিষ্ট শ্রেণীর সমস্ত অক্ষর প্রায়শই একটি সাধারণ বিট প্যাটার্ন ভাগ করে), এনকোডিং এবং সিরিয়ালযুক্ত ডেটা ডিকোডিং, ভিএম বা সিপিইউ ব্যবহার করে অপকডস, এবং আরও বিটওয়াইজ অপস ছাড়া, এই কাজের বেশিরভাগ ক্ষেত্রে কম নির্ভরযোগ্যতার সাথে বা দরিদ্র পাঠযোগ্যতার সাথে টাস্কটি সম্পাদনের জন্য আরও অনেক বেশি জটিল ক্রিয়াকলাপ প্রয়োজন।

উদাহরণ স্বরূপ:

// Given a 30-bit RGB color value as a 32-bit int
// A lot of image sensors spit out 10- or 12-bit data
// and some LVDS panels have a 10- or 12-bit format
b = (color & 0x000003ff);
g = (color & 0x000ffc00) >> 10;
r = (color & 0x3ff00000) >> 20;

// Going the other way:
color = ((r << 20) & 0x3ff00000) | ((g << 10) & 0x000ffc00) | (b & 0x000003ff);

আরআইএসসি-টাইপ সিপিইউগুলির জন্য সিপিইউ নির্দেশাবলী ডিকোডিংয়ের জন্য (যেমন অন্য প্ল্যাটফর্মটি অনুকরণ করার সময়) উপরের মতো বৃহত মানের অংশগুলি নিষ্কাশন করা প্রয়োজন। কখনও কখনও, গুণগুলি এবং বিভাগ এবং মডুলো ইত্যাদির সাহায্যে এই ক্রিয়াকলাপগুলি সমতুল্য বিটওয়াইস অপের চেয়ে দশগুণ বেশি ধীর হতে পারে।


12

একটি সাধারণ উদাহরণ 24 বিট আরজিবি মান এবং পিছনে পৃথক রঙগুলি বের করা।


সম্পাদনা: http://www.docjar.com/html/api/java/awt/Color.java.html থেকে

    value =  ((int)(frgbvalue[2]*255 + 0.5))    |
                (((int)(frgbvalue[1]*255 + 0.5)) << 8 )  |
                (((int)(frgbvalue[0]*255 + 0.5)) << 16 ) |
                (((int)(falpha*255 + 0.5)) << 24 );

অনুশীলনে এই উদাহরণটি দেখান? একটি কোড স্নিপেট?
Anto

আরও ভাল উদাহরণ হতে পারে 16-বিট (4.5bpc) বা 30-বিট (10 বিপিসি) আরজিবি মানগুলি প্রক্রিয়াকরণ করা।
গ্রেফ্যাড

@ গ্রে, এই জাতীয় উদাহরণ যুক্ত করতে নির্দ্বিধায়।

6

এখানে একটি বাস্তব বিশ্বের উদাহরণ যা আপনি ভূমিকম্প 3, ভূমিকম্প 4 এ পাবেন om এই সমস্ত গেমগুলি কিউ 3 ইঞ্জিন ব্যবহার করেছে

float Q_rsqrt( float number )
{
        long i;
        float x2, y;
        const float threehalfs = 1.5F;

        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;                       // evil floating point bit level hacking [sic]
        i  = 0x5f3759df - ( i >> 1 );               // what the fuck? [sic]
        y  = * ( float * ) &i;
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//    y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

        return y;
}

(এই কোডটি বোঝার জন্য আপনাকে বুঝতে হবে যে ভাসমান পয়েন্ট সংখ্যা কীভাবে সংরক্ষণ করা হয়, আমি অবশ্যই সেটির বিস্তারিত বলতে পারি না)

ব্যবহারের শর্তে, আপনি যদি এমন ক্ষেত্রগুলিতে না থাকেন যেখানে নেটওয়ার্কিং বা গ্রাফিক্সের মতো কিছুটা স্থানান্তর প্রয়োজন হয়, তবে আপনি তাদের উদ্দেশ্যটি সামান্য শিক্ষাগত পেতে পারেন। তবে এখনও আকর্ষণীয় (আমার কাছে কমপক্ষে)


+1 এই মন্তব্যগুলির জন্য, যদিও সেগুলি আপনার না হয়। আমাকে চক্কর দিয়েছে।
বেসিনেটর

4

দুটির শক্তির দ্বারা গুণন বা ভাগ করার চেয়ে স্থানান্তর দ্রুত হয়। উদাহরণস্বরূপ, একটি << = 2 একটি 4 দ্বারা গুন করে verse বিপরীতভাবে, একটি >> = 2 একটি চার দ্বারা ভাগ করে। বিট-ওয়াইন অপারেটরগুলি ব্যবহার করে একটি ডিভাইসে ডেটা বিট-ব্যাং করতে পারে can উদাহরণস্বরূপ, আমরা এন লুপের অভ্যন্তরে শিফট, এক্সওর এবং "এবং" ক্রিয়াকলাপগুলি ব্যবহার করে এন পি পোর্টের বাইরে এন সিরিয়াল ডেটা প্রবাহগুলি প্রেরণ করতে পারি। ডিজিটাল লজিকের মধ্যে যে কোনও কিছু সম্পন্ন করা যায় তা সফ্টওয়্যার এবং বিপরীতেও সম্পন্ন করা যায়।


1
রাউন্ড আপ বা ডাউন দিয়ে বিভাজন করার সময় কেবল সতর্কতা অবলম্বন করুন। স্থানান্তরটি এর জন্য অ্যাকাউন্ট হয় না, সুতরাং আমি যখন বিভাজন বোঝাতে চাইছি তখন কোডের মধ্যে বিভাজন ব্যবহার করা আরও ভাল অনুশীলন হিসাবে পাওয়া গেছে এবং সংকলকটি এটিকে একটি শিফটে অপ্টিমাইজ করতে দেয় এবং যুক্ত করে দেয় আমার জন্য.
দেমিন

@ ডেমিন: আমি যখন এই কৌশলটি ব্যবহার করি তখন আমি পূর্ণসংখ্যার সাথে কাজ করছি। সি এবং সি ++ তে পূর্ণসংখ্যা বিভাগের জন্য ডিফল্ট আচরণ হ'ল শূন্যের দিকে কাটা; সুতরাং, দুটি সংখ্যার শক্তির সাহায্যে একটি পূর্ণসংখ্যা স্থানান্তর করা দু'জনের শক্তির দ্বারা পূর্ণসংখ্যা ভাগ করার সমান ফলাফল উত্পন্ন করে।
বিট-টুইডলার

1
@ বিট-টুইডলার ডান শিফট নেতিবাচক সংখ্যার জন্য বিভাগ হিসাবে একইভাবে কাজ করে না।
দেমিন

@ ডেমিন: আপনি আমাকে ভুল প্রমাণ করার জন্য নরক বলে মনে করছেন। প্রথমত, আপনি গোলাকার সমস্যাটি ছুঁড়ে ফেলুন। আমি যখন সি এবং সি ++ বিভাগে শূন্যের দিকে বিভাজনকে উল্লেখ করে সেই দাবিটিকে প্রত্যাখ্যান করি, আপনি স্বাক্ষরিত পূর্ণসংখ্যার সমস্যাটি ছুঁড়ে ফেলুন। আমি কোথায় বললাম যে আমি দু'জনের পরিপূরক নেতিবাচক পূর্ণসংখ্যার জন্য শিফট অপারেটরটি প্রয়োগ করছি? এই বলে, একজন এখনও দু'জনের পাওয়ার দ্বারা বিভাজন করতে শিফট অপারেটরটি ব্যবহার করতে পারে। যাইহোক, সি এবং সি ++ সমতলে পুরানো ডান শিফটের পরিবর্তে গাণিতিক ডান শিফট সম্পাদন করে এবং মানটি নেতিবাচক কিনা তা দেখতে প্রথমে চেক করতে হবে। মানটি যদি নেতিবাচক হয়
বিট-টুইডলার

1
ঠিক যেমন, সূক্ষ্ম পার্থক্য রয়েছে বলে গুণ এবং বিভাগের বিকল্প হিসাবে স্থানান্তরিত করার সময় সতর্কতা অবলম্বন করুন। কোন কোন আরো কম.
ডেইমিন

3

অনেক দিন আগে, বিট অপারেটরগুলি দরকারী ছিল। আজ তারা তাই কম। ওহ তারা সম্পূর্ণরূপে অকেজো নয়, তবে এটি ব্যবহার করা উচিত ছিল এমন একটি ব্যবহার দেখেছি যে দীর্ঘকাল হয়েছে।

1977 সালে আমি একটি সংসদীয় ভাষা প্রোগ্রামার ছিল। আমি নিশ্চিত হয়েছি যে সমাবেশটি একমাত্র সত্য ভাষা। আমি নিশ্চিত যে পাস্কালের মতো ভাষা একাডেমিক ওয়েইনিদের জন্য ছিল যাদের কখনও সত্যিকারের কিছু করতে হয় নি ।

তারপরে আমি কর্নিগান এবং রিচি-র "দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" পড়েছিলাম। এটা আমার মন পুরোপুরি পরিবর্তন। কারন? এতে বিট অপারেটর ছিল! এটা তোলে ছিল একটি সমাবেশ ভাষা! এটির একটি আলাদা বাক্য গঠন ছিল।

সেই দিনগুলিতে আমি আরএস, ওরস, শিফট এবং ঘোরানো ছাড়াই কোড লেখার ধারণা করতে পারিনি। আজকাল আমি সেগুলি প্রায় কখনও ব্যবহার করি না।

সুতরাং, আপনার প্রশ্নের সংক্ষিপ্ত উত্তর হ'ল "কিছুই নয়"। তবে তা মোটেও ন্যায্য নয়। সুতরাং দীর্ঘতর উত্তর: "বেশিরভাগ কিছুই নয়।"



বিট অপারেটররা আজকের দিনে দরকারী। আপনার ডোমেনে তারা ব্যবহার হচ্ছে না এ বিষয়টি এটিকে অব্যবহৃত বা এমনকি প্রায়শই ব্যবহার করা হয় না। এখানে একটি সহজ উদাহরণ: চেষ্টা করুন এবং বিট অপারেটর ছাড়াই AES প্রয়োগ করুন। এটি প্রতিদিনের শত শত বা হাজার হাজার বার বেশিরভাগ কম্পিউটারে করা এমন কোনও কাজের অফ-দ্য কফ উদাহরণ।
আমার সঠিক মতামতটি

বিট-বুদ্ধিমান অপারেটরগুলি ব্যবহার না করে ডেটা এনকোডিং / ডিকোডিং সেরা বেদনাদায়ক। উদাহরণস্বরূপ, একটি বার্তায় MIME সংযুক্তি যুক্ত করার জন্য আমাদের তিন-থেকে-চারটি ডেটা কোডিং (ওরফে রেডিক্স 64৪ কোডিং) পরিচালনা করতে সক্ষম হওয়া প্রয়োজন।
বিট-টুইডলার

2

জোড়া লাগানো

আমি ডিইএস এনক্রিপশন অ্যালগরিদম থেকে খুব ছোট স্নিপেটটি একবার দেখার পরামর্শ দিই :

temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);

যদিও নিশ্চিত না যে এই দিনগুলিতে ডিইএসের প্রস্তাব দেওয়া হচ্ছে: পি
আরমান্ড

@ অ্যালিসন: না, তবে এটি প্রতিস্থাপন করা এনক্রিপশন অ্যালগরিদমগুলিতে আরও বিট ম্যানিপুলেশন অপারেশন জড়িত বলে আমি মনে করি। :-)
কারসন 63000 21 12

@ অ্যালিসন - অবশ্যই, তবে ট্রিপলডিস মাত্র 3 বার কী বিট দিয়ে 3 বার করা হয়েছে।
স্কট হুইটলক

2

অনেক ভাল উত্তর, তাই আমি এই ব্যবহারগুলি পুনরাবৃত্তি করব না।

আমি তাদের পরিচালিত কোড (সি # /। নেট) এ বেশ ব্যবহার করি এবং এটি স্থান সংরক্ষণ, উচ্চ কার্যকারিতা বা চৌকস বিট শিফটিং অ্যালগরিদমের সাথে কিছুই করার থাকে না। কখনও কখনও কিছু যুক্তি এইভাবে ডেটা সংরক্ষণের জন্য উপযুক্ত। আমার যখন এনাম থাকে আমি প্রায়শই সেগুলি ব্যবহার করি তবে উদাহরণগুলি একই সাথে সেই এনাম থেকে একাধিক মান নিতে পারে। আমি কাজ থেকে কোডের উদাহরণ পোস্ট করতে পারি না, তবে "ফ্ল্যাগস এনাম" ("ফ্ল্যাগস") এর জন্য একটি দ্রুত গুগল কিছুটা উপায়ে ব্যবহার করার জন্য একটি এনাম সংজ্ঞায়নের সি # উপায়) এই দুর্দান্ত উদাহরণ দেয়: http: // www.dotnetperls.com/enum-flags


2

বিট প্যারালাল কম্পিউটিংও রয়েছে। যদি আপনার ডেটাটি কেবল 1 এবং 0 এর হয় তবে আপনি সেগুলির মধ্যে 64 টি একটি স্বাক্ষরবিহীন দীর্ঘ দীর্ঘ শব্দে প্যাক করতে পারেন এবং way৪ ওয়ে সমান্তরাল ক্রিয়াকলাপ পেতে পারেন। জেনেটিক তথ্য দুটি বিট (ডিএনএর এজিসিটি এনকোডিং উপস্থাপন করে), এবং আপনি যদি বিট সমান্তরাল ফ্যাশনে বিভিন্ন গণনা করতে পারেন তবে আপনি যদি না করেন তবে আপনি আরও অনেক কিছু করতে পারেন। মেমরি-ডাটাবেসের ঘনত্ব-মেমরি, বা ডিস্ক ক্ষমতা, বা যোগাযোগ ব্যান্ডউইদথ সীমিতভাবে বোঝায় না যে সংকোচন / ডিকম্প্রেশন বিবেচনা করা উচিত। এমনকি কম প্রিসিস ইন্টিজারগুলি, যা চিত্র প্রক্রিয়াকরণের মতো ক্ষেত্রে প্রদর্শিত হয়, কৌশলযুক্ত বিট সমান্তরাল কম্পিউটিংয়ের সুবিধা নিতে পারে। এটি নিজের কাছে একটি সম্পূর্ণ শিল্প।


1

কেন তারা খুঁজে পাওয়া যায়?

ওয়েল সম্ভবত এটি কারণ তারা সমাবেশ নির্দেশাবলীর সাথে সামঞ্জস্য করে এবং কখনও কখনও তারা কেবল উচ্চ স্তরের ভাষার জিনিসগুলির জন্য দরকারী। একই জিনিস ভয়ঙ্করদের ক্ষেত্রে প্রযোজ্য GOTOযা JMPসমাবেশের নির্দেশের সাথে মিলে যায়।

তাদের ব্যবহার কি?

সত্যিই নামকরণের জন্য অনেকগুলি ব্যবহার রয়েছে তাই আমি খুব সামান্য স্থানীয় ব্যবহারের পরেও সাম্প্রতিক একটি ব্যবহার করব। আমি 6502 সমাবেশের সাথে অনেক কাজ করি এবং আমি একটি ছোট অ্যাপ্লিকেশন নিয়ে কাজ করছিলাম যা মেমরি ঠিকানা, মানগুলি, মানগুলি ইত্যাদি কোডগুলিতে রূপান্তর করে যা গেমজেনি ডিভাইসে (মূলত এনইএসের জন্য একটি প্রতারণামূলক অ্যাপ্লিকেশন) ব্যবহার করা যেতে পারে into কোডগুলি কিছুটা বিট ম্যানিপুলেশন দ্বারা তৈরি করা হয়েছে।


1

আজকাল অনেক প্রোগ্রামার নিকটবর্তী অসীম স্মৃতিযুক্ত কম্পিউটারগুলিতে ব্যবহৃত হয়।

তবে কিছু ব্যবহার এখনও ক্ষুদ্র মাইক্রোকন্ট্রোলার প্রোগ্রাম করে যেখানে প্রতিটি বিট গণনা করা হয় (যখন আপনার কাছে কেবল উদাহরণের জন্য 1 কে বা তার চেয়ে কম র‌্যাম থাকে), এবং বিটওয়াইস অপারেটররা কোনও প্রোগ্রামারকে কিছু বিস্তৃত প্রোগ্রামিংয়ের অপচয় করার পরিবর্তে একবারে সেই বিটগুলি ব্যবহার করতে দেয় allows অ্যালগরিদমের দ্বারা প্রয়োজনীয় কিছু রাজ্য ধরে রাখার জন্য বিমূর্ততা সত্তার প্রয়োজন হতে পারে। এই ডিভাইসগুলির আইওতে বিটওয়াস বেসগুলিতে পড়তে বা নিয়ন্ত্রণ করা হতে পারে।

"রিয়েল ওয়ার্ল্ড" এর মধ্যে সার্ভার বা পিসিগুলির চেয়ে অনেক ছোট মাইক্রোকন্ট্রোলার রয়েছে।

খাঁটি তাত্ত্বিক সিএস ধরণের জন্য, ট্যুরিং মেশিনগুলি সমস্ত রাজ্যের বিট।


1

বিটওয়াইস অপারেটরগুলির সম্ভাব্য আরও কয়েকটি ব্যবহারের মধ্যে একটি মাত্র ...

বিটওয়াইজ অপারেটরগুলি আপনার কোডটি আরও পঠনযোগ্য করে তুলতে সহায়তা করতে পারে। নিম্নলিখিত ফাংশন ঘোষণা বিবেচনা করুন ....

int  myFunc (bool, bool, bool, bool, bool, bool, bool, bool);

...

myFunc (false, true, false, false, false, true, true, false);

কোডটি লিখতে বা পড়ার সময় কোন বুলিয়ান প্যারামিটারটির অর্থ কী তা ভুলে যাওয়া খুব সহজ। আপনার গণনার ট্র্যাক হারাতেও সহজ। এই জাতীয় রুটিন পরিষ্কার করা যেতে পারে।

/* More descriptive names than MY_FLAGx would be better */
#define MY_FLAG1    0x0001
#define MY_FLAG2    0x0002
#define MY_FLAG3    0x0004
#define MY_FLAG4    0x0008
#define MY_FLAG5    0x0010
#define MY_FLAG6    0x0020
#define MY_FLAG7    0x0040
#define MY_FLAG8    0x0080

int  myFunc (unsigned myFlags);

...

myFunc (MY_FLAG2 | MY_FLAG6 | MY_FLAG7);

আরও বর্ণনামূলক পতাকা নাম সহ, এটি অনেক বেশি পাঠযোগ্য।


1

আপনি যদি ইউনিকোড সম্পর্কে কিছু জানেন তবে আপনি সম্ভবত ইউটিএফ -8 এর সাথে পরিচিত। এটি 20 টি বিট কোড পয়েন্ট 1 থেকে 4 বাইটে প্যাক করতে একগুচ্ছ বিট পরীক্ষা, শিফট এবং মাস্ক ব্যবহার করে।


0

আমি এগুলি প্রায়শই ব্যবহার করি না তবে কখনও কখনও তারা কাজে আসে। এনাম হ্যান্ডলিংয়ের কথা মাথায় আসে।

উদাহরণ:

enum DrawBorder{None = 0, Left = 1, Top = 2, Right = 4, Bottom = 8}

DrawBorder drawBorder = DrawBorder.Left | DrawBorder.Right;//Draw right & left border
if(drawBorder & DrawBorder.Left == DrawBorder.Left)
  //Draw the left border
if(drawBorder & DrawBorder.Top == DrawBorder.Top)
  //Draw the top border
//...

0

এই ব্যবহারটি এখনও উল্লেখ করা হয়েছে কিনা তা নিশ্চিত নয়:

আমি একাধিক রিটার্ন মানগুলি 0 বা 1 এ হ্রাস করার জন্য ইলিউমাস (ওপেনসোলারিস) উত্স কোডের সাথে কাজ করার সময় OR দেখতে পাচ্ছি eg

int ret = 0;
ret |= some_function(arg, &arg2); // returns 0 or 1
ret |= some_other_function(arg, &arg2); // returns 0 or 1
return ret;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.