চ্যালেঞ্জ
একটি ফাংশন প্রয়োগ করুন যা দুটি পূর্ণসংখ্যাকে গ্রহণ করে যার মান 0 - 255 থেকে শুরু করে 256 মোডের পূর্ণসংখ্যার যোগফল দেয় You আপনি কেবল বিটওয়াইজ নেগেশন (~), বিটওয়াইস বা (|), বিট শিফটিং অপারেটর (>>, <<) ব্যবহার করতে পারেন , এবং অ্যাসাইনমেন্ট (=)।
আপনি যে জিনিসগুলি ব্যবহার করতে পারবেন না সেগুলির মধ্যে অন্তর্ভুক্ত রয়েছে (তবে সীমাবদ্ধ নয়)
- সংযোজন, বিয়োগ, গুণ এবং ভাগ
- loops
- শর্তাধীন বিবৃতি
- ফাংশন কল
বাইনারি বা, বাইনারি প্রত্যাখ্যান এবং বিট শিফট ক্রিয়াকলাপগুলির সবচেয়ে কম ব্যবহার । টাই হওয়ার সময়ে সর্বাধিক জনপ্রিয় সমাধানটি জয়ী হয়। সর্বদা হিসাবে, স্ট্যান্ডার্ড লুফোলস প্রয়োগ হয়।
এখানে একটি সাধারণ 2-বিট অ্যাডারের উদাহরণ। এটিতে 107 এর মোট স্কোরের জন্য 77 বাইনারি অবহেলা, 28 বাইনারি ও 2 বিট-শিফট ব্যবহার করা হয় (এটি সি প্রিপ্রসেসরটি চালিয়ে দেখা যায় gcc -E
)। এটিগুলি অপসারণ #define
এবং ফলাফলের এক্সপ্রেশনগুলি সরল করে আরও বেশি দক্ষ করা যেতে পারে , তবে আমি তাদের পরিষ্কার রেখেছি।
#include <stdio.h>
#define and(a, b) (~((~a)|(~b)))
#define xor(a, b) (and(~a,b) | and(a,~b))
int adder(int a, int b)
{
int x, carry;
x = xor(and(a, 1), and(b, 1));
carry = and(and(a, 1), and(b, 1));
carry = xor(xor(and(a, 2), and(b, 2)), (carry << 1));
x = x | carry;
return x;
}
int main(int argc, char **argv)
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (adder(i, j) != (i + j) % 4) {
printf("Failed on %d + %d = %d\n", i, j, adder(i, j));
}
}
}
}
আপডেট: উদাহরণ যুক্ত হয়েছে এবং স্কোরিং ক্রাইটার পরিবর্তন হয়েছে