বিটওয়াইজ অপারেটররা সর্বদা তাদের অপারেশনগুলিকে একটি পূর্ণসংখ্যায় রূপান্তর করে। সুতরাং, 4 >> trueএকই হিসাবে 4 >> 1যা ডান এক অবস্থান থেকে কিছুটা শিফট করবে
(decimal) 4 = (binary) 100
(binary) 100 >> 1 = (binary) 010
(binary) 010 = (decimal) 2
সুতরাং, ব্যবহার trueবা falseব্যবহার করার একটা ঝোঁক শুধু একটি চৌমাথা উপায় 1বা 0।
notNotNotফাংশন খুব সহজ অপারেশন সামগ্রিক হয়েছে:
a%2প্রথম সংখ্যাকে সমান 0বা 1বিজোড়ের জন্য রূপান্তর করে ।
>> bউভয় 0অবস্থানের জন্য falseবা 1অবস্থানের জন্য ডান স্থানান্তরিত করুন true।
aহয় বিজোড় (1) এবং bহয় false=1
- ডানদিকে শূন্য শিফট রয়েছে, সুতরাং সংখ্যাটি একই থাকে।
aহয় বিজোড় (1) এবং bহয় true=0
- শুধুমাত্র সেট বিট
1ডান স্থানান্তরিত এবং বাতিল করা হয়।
aসমান (0) এবং bহয় false=0
- ডানদিকে শূন্য শিফট রয়েছে, সুতরাং সংখ্যাটি একই থাকে।
aসমান (0) এবং bহয় true=0
- বেস নম্বরটি
0যার কোনও বিট সেট নেই, তাই কোনও পরিমাণে স্থানান্তর করা এটি পরিবর্তন করে না।
!!() ফলাফলকে বুলেয়ানে রূপান্তরিত করে।
এই বলে যে, এখানে সমাধানটি ভুল, যেহেতু notNotNot(2, true)উত্পাদন করবে false- aসমান এবং bহয় true। প্রত্যাশাটি trueযেহেতু এটি উত্পাদন করবে !!true = true। একই সমস্যাটি যে কোনও সংখ্যক এবং এর জন্য উপস্থিত true।
ডান শিফটের পরিবর্তে বিটওয়াইজ এক্সওআর ব্যবহার করে এটি সহজেই ঠিক করা যেতে পারে:
aহয় বিজোড় (1) এবং bহয় false=1
- উভয় ম্যাচ, তাই তারা উল্লিখিত হয়
0
aহয় বিজোড় (1) এবং bহয় true=0
- তারা মেলে না, তাই আমরা পাই
1
aসমান (0) এবং bহয় false=0
- উভয় ম্যাচ, তাই আমরা পেতে
0
aসমান (0) এবং bহয় true=1
- তারা মেলে না, তাই আমরা পাই
1
notNotNot = (a,b) => !!(a%2 ^ b);
console.log("!!true = ", notNotNot(2, true))
console.log("!!!true =", notNotNot(3, true))
console.log("!!false = ", notNotNot(2, false))
console.log("!!!false = ", notNotNot(3, false))
//bonus
console.log("true = ", notNotNot(0, true))
console.log("false = ", notNotNot(0, false))
কেবল সম্পূর্ণতার জন্য, আপনি যদি পুরোপুরি বিটওয়াইজ অপারেশন চান:
মডুলো অপারেশনটি কিছুটা %2পরিবর্তিত হয়ে &1সর্বনিম্ন বিট পেতে পারে bit এমনকি সংখ্যার জন্য, এই উত্পাদ হবে 0যেহেতু আপনি কম্পিউটিং চাই
xxx0
&
0001
যা শূন্য। এবং বিজোড় সংখ্যার জন্য একই প্রয়োগ হয় তবে ফলস্বরূপ আপনি একটি পাবেন:
xxx1
&
0001
সুতরাং ফলাফল a&1এবং a%2অভিন্ন। তদ্ব্যতীত, যদিও বিটওয়াইজ অপারেশনগুলি সংখ্যাটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যায় রূপান্তর করে যা প্যারিটি সংরক্ষণ করা হবে বলে কিছু যায় আসে না ।
//larger than 31 bits
const largeValue = 2**31 + 1;
//larger than 32 bits
const veryLargeValue = 2**32 + 1
console.log("2**31 + 1 =", largeValue);
console.log("2**32 + 1 =", veryLargeValue);
console.log("2**31 + 1 to 32-bit signed integer =", largeValue | 0);
console.log("2**32 + 1 to 32-bit signed integer = ", veryLargeValue | 0);
const isOddModulo = number =>
console.log(`(${number} % 2) can detect an odd number: ${(number % 2) === 1}`);
const isOddBitwise = number =>
console.log(`(${number} & 1) can detect an odd number: ${(number & 1) === 1}`);
isOddModulo(largeValue);
isOddBitwise(largeValue);
isOddModulo(veryLargeValue);
isOddBitwise(veryLargeValue);
true=1(দশমিক) =01(বাইনারি) একের বামে স্থানান্তরিত হয়ে10বাইনারি বা2দশমিক উত্পাদিত হবে ।