জাভাস্ক্রিপ্ট ডাবল যথার্থ 64৪-বিট ভাসমান সংখ্যাNumber
হিসাবে উপস্থাপন করে ।
Math.floor
এটি মাথায় রেখে কাজ করে।
বিটওয়াইজ অপারেশনগুলি 32 বিট স্বাক্ষরিত পূর্ণসংখ্যায় কাজ করে। 32 বিট স্বাক্ষরিত পূর্ণসংখ্যাগুলি প্রথম বিটটিকে নেতিবাচক সিগনিফায়ার হিসাবে ব্যবহার করে এবং অন্যান্য 31 টি বিট সংখ্যা। এ কারণে, সর্বনিম্ন সর্বাধিক সংখ্যা অনুমোদিত 32 বিট স্বাক্ষরিত সংখ্যাগুলি যথাক্রমে -2,147,483,648 এবং 2147483647 (0x7FFFFFFFF)।
সুতরাং যখন আপনি করছেন | 0
, আপনি মূলত করছেন & 0xFFFFFFFF
। এর অর্থ, 0x80000000 (2147483648) বা ততোধিক হিসাবে প্রদর্শিত যে কোনও সংখ্যা numberণাত্মক সংখ্যা হিসাবে ফিরে আসবে।
উদাহরণ স্বরূপ:
// Safe
(2147483647.5918 & 0xFFFFFFFF) === 2147483647
(2147483647 & 0xFFFFFFFF) === 2147483647
(200.59082098 & 0xFFFFFFFF) === 200
(0X7FFFFFFF & 0xFFFFFFFF) === 0X7FFFFFFF
// Unsafe
(2147483648 & 0xFFFFFFFF) === -2147483648
(-2147483649 & 0xFFFFFFFF) === 2147483647
(0x80000000 & 0xFFFFFFFF) === -2147483648
(3000000000.5 & 0xFFFFFFFF) === -1294967296
এছাড়াও। বিটওয়াস অপারেশনগুলি "তল" করে না। তারা কেটে ফেলেছে , যা বলা হিসাবে একই, তারা সবচেয়ে কাছাকাছি গোল করে 0
। একবার আপনি ঋণাত্মক সংখ্যা কাছাকাছি যান, Math.floor
চক্রের নিচে যখন rounding, bitwise শুরু আপ ।
আমি আগেই বলেছি, Math.floor
এটি নিরাপদ কারণ এটি 64 বিট ভাসমান সংখ্যার সাথে কাজ করে। বিটওয়াইস দ্রুত , হ্যাঁ, তবে 32 বিট স্বাক্ষরিত স্কোপের মধ্যে সীমাবদ্ধ।
সংক্ষেপ:
- আপনি যদি কাজ করেন তবে বিটওয়াইস একই কাজ করে
0 to 2147483647
।
- আপনি যদি কাজ করেন তবে বিটওয়াইসটি 1 নম্বর বন্ধ
-2147483647 to 0
।
- এর চেয়ে কম
-2147483648
এবং এর চেয়ে বেশি সংখ্যার জন্য বিটওয়াইজ সম্পূর্ণ আলাদা 2147483647
।
আপনি যদি সত্যিই পারফরম্যান্সটি সাম্প্রতিক করতে এবং উভয়টি ব্যবহার করতে চান:
function floor(n) {
if (n >= 0 && n < 0x80000000) {
return n & 0xFFFFFFFF;
}
if (n > -0x80000000 && n < 0) {
return (n - 1) & 0xFFFFFFFF;
}
return Math.floor(n);
}
Math.trunc
বিটওয়াইজ অপারেশনের মতো কাজগুলি যুক্ত করতে । সুতরাং আপনি এটি করতে পারেন:
function trunc(n) {
if (n > -0x80000000 && n < 0x80000000) {
return n & 0xFFFFFFFF;
}
return Math.trunc(n);
}