"|" কি করে (একক পাইপ) জাভাস্ক্রিপ্টে করবেন?


148
console.log(0.5 | 0); // 0
console.log(-1 | 0);  // -1
console.log(1 | 0);   // 1

কেন 0.5 | 0শূন্য ফিরে আসে , কিন্তু কোনও পূর্ণসংখ্যা (negativeণাত্মক সহ) ইনপুট পূর্ণসংখ্যা ফেরত দেয়? একক পাইপ ("|") কী করে?


12
আপনি টাইপ করেছেন এমন বিষয়ে আপনাকে সতর্কতা অবলম্বন করতে সিনট্যাক্স ত্রুটিগুলিতে সহায়তা করে এর পরিবর্তে ||
অ্যান্ড্রু মায়ার্স

উত্তর:


157

এটি কিছুটা দিকের বা
যেহেতু বিটওয়াইজ অপারেশনগুলি কেবল পূর্ণসংখ্যার উপর নির্ভর করে, 0.5এটি কেটে নেওয়া হয়।

0 | xযে xকোনও জন্য x


9
ভাসমান-পয়েন্ট সংখ্যাটি ইনট বা রূপান্তর করার জন্য এটি একটি দুর্দান্ত উপায়parseInt()
মাবিআই

5
@ মাবিবি: আপনার জানা উচিত যে মানটি 32-বিট সংখ্যায় রূপান্তরিত হয়, সুতরাং এটি বৃহত্তর সংখ্যার জন্য সঠিকভাবে কাজ করবে না।
গুফা

1
সুতরাং মেঝে ফাংশন হিসাবে একই বিবেচনা করা যেতে পারে?
May13ank

2
এটি কেবল বিটওয়াইসের জন্য বা ব্যবহার করুন। @ গুফা যেমন বলেছিল, বিপুল সংখ্যক আশানুরূপ আচরণ করবে না। উদাঃ 248004937500 | 0 = -1103165668
জোসেফ কনোলি

বড় সংখ্যাগুলি উপচে পড়বে কারণ তারা 32-বিট ইন-তে রূপান্তরিত হয়েছে।
পিচ্ছিল

151

বিটের তুলনা এত সহজ যে এটি প্রায় বোধগম্য নয়;) এই "বাচ্চা" দেখুন

   8 4 2 1
   -------
   0 1 1 0 = 6  (4 + 2)
   1 0 1 0 = 10 (8 + 2)
   =======
   1 1 1 0 = 14 (8 + 4 + 2)

বিটওয়্যারিং ওরিং 6 এবং 10 আপনাকে 14 দিন:

   alert(6 | 10); // should show 14

মারাত্মক বিভ্রান্ত!


16
বুলিয়ান পাশাপাশি কাজ করে। জেএস সত্য হিসাবে 1 হিসাবে মিথ্যা, 0 হিসাবে মিথ্যা; তাইalert(true | false) //yields 1; alert(true | true) //yields 1; alert(false | true) //yields 1; alert(false | false) //yields 0
গর্ডন

21

একটি একক পাইপ হল হয় বিট-জ্ঞানী বা

প্রতিটি জোড়া বিটগুলিতে ওআর অপারেশন করে। a বা b হয় 1 বা এক হয় তবে বি হয় 1 হয়।

জাভাস্ক্রিপ্ট বিটওয়াইজ অপারেশনগুলিতে কোনও অ-পূর্ণসংখ্যার সংখ্যা কেটে দেয়, সুতরাং এটির হিসাবে 0|0এটি 0 হিসাবে গণনা করা হয়।


6
এটি প্রশ্নের উত্তর দেয় না। ("কেন এই প্রত্যাবর্তন 0")
কার্ক ওল

8

এই উদাহরণ আপনাকে সাহায্য করবে।

 
    var testPipe = function(input) { 
       console.log('input => ' + input);
       console.log('single pipe | => ' + (input | 'fallback'));
       console.log('double pipe || => ' + (input || 'fallback'));
       console.log('-------------------------');
    };

    testPipe();
    testPipe('something'); 
    testPipe(50);
    testPipe(0);
    testPipe(-1);
    testPipe(true);
    testPipe(false);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.